2014-04-04 103 views
8

你可以设置一个变量为一个命令是这样的:以exec猛砸组变量

MY_VARIABLE=my_value ./my_script.sh 

可以交给另一个这样的脚本:

exec ./my_script.sh 

但是,当我尝试做既像这样:

exec MY_VARIABLE=my_value ./my_script.sh 

我得到一个错误:

exec: MY_VARIABLE=my_value: not found 

这是为什么?
有没有办法做到这一点?

回答

23

您需要使用env指定环境变量:

exec env MY_VARIABLE=my_value ./my_script.sh 

如果你希望你的脚本与一个空的环境或只使用指定的变量开始,使用-i选项。

man env

env - run a program in a modified environment 
1

在bash中,你可以通过将分配在命令的开头设置环境变量的命令。此作品同为exec其他任何命令,所以你写:

​​
+2

关于“EXEC ENV”的好处是,你可以使用它可能会或可能不会设置shell变量的变量。例如,如果我有一个脚本为一个任意命令做了一些设置,我可以用'exec env“$ @”'结束它,无论“$ @”是否设置变量,它都会起作用。要使用这个解决方案,我必须解析并分解“$ @”中的参数。 – Ken