2015-10-20 69 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可能會導致不必要的副作用。