防止子进程继承父进程的环境

时间:2015-10-20 08:36:59

标签: linux bash shell unix

我有以下2个场景,命令doSomething在后​​台运行并使用env变量VAR。我在〜/ .bash_profile中为变量分配了正确的值。

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

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

似乎有一个选项可能是使用env -u取消设置更改的值并重新分配bash_profile中的值。还有更好的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议将变量定义放在一个单独的文件中,例如:

var.sh

export VAR="value"

然后从.bashrc和脚本中找到该文件表格:

source /path/to/var.sh

将变量定义放入单独的文件中的优势在于,您不需要从脚本中获取整个.bashrc,这可能会导致不必要的副作用。