2015-10-20 70 views
2

我有以下两种方案,其中的命令doSomething在后台运行并使用env变量VAR。我已经为〜/ .bash_profile中的变量分配了正确的值。防止继承父级环境的子进程

1)当从bash提示符运行$doSomething &:事情工作正常,因为使用了正确的VAR值。

2)当从shell脚本内部运行时:shell脚本本身作为改变VAR值和导出的进程周期的一部分被调用。当我在shell脚本中调用$doSomething &时,它使用VAR的新值并失败。这是有道理的,因为命令会继承脚本的环境。有没有一种方法可以调用该命令,以便使用bash_profile中的值?

看来,一个选项可能是使用env -u来取消更改的值并重新分配bash_profile中的值。有没有更好的办法?

谢谢!

+0

不,这就是它工作的方式。 – Sobrique

+0

为什么不在你的子脚本中使用'source〜/ .bash_profile' ..? – n00dl3

+0

使用'env'或在运行命令时显式指定变量(即:'LC_ALL = C OtherVar = foo doSomething&')。 – bufh

回答

0

我建议把变量定义成一个单独的文件,如:

var.sh

export VAR="value" 

然后来源,文件表格.bashrc内,并从你的脚本:

source /path/to/var.sh 

将变量定义放入单独的文件中的优点是,您不需要源代码整个.bashrc可能会导致不必要的副作用。