2012-04-23 46 views
1

我在Snow Leopard上遇到了真正奇怪的問題。在我的終端,我寫了兩個劇本:OSX導出的環境變量未在子進程中繼承

第一:

#script-1.sh 
export MY_VAR="This is my variable" 

第二個腳本:

# script-2.sh, having +x permission 
#!/bin/bash 
echo $MY_VAR 

在終端,如果我執行此腳本-1,然後調用腳本2作爲子進程,沒有輸出顯示:

$> source script-1.sh 
$> echo $MY_VAR 
This is my variable 
$> . script-2.sh 
This is my variable 
$> ./script-2.sh 

$> 

任何想法這裏有什麼問題?我使用Cygwin在Windows上嘗試了相同的場景,並且它在預期的情況下工作 - 在OSX上,似乎子進程完全不知道$MY_VAR

回答

1

你確定你沒有在子進程中運行script-1.sh?我在10.6.8和10.7.3中試過你的例子,它正常工作。命令source script-1.sh. script-1.sh相同,它在相同的上下文中運行腳本。導出的變量是環境變量,它們總是被複制到子進程。

只有當我能夠重現相同輸出的情況下,當我從script-1.sh文件中省略export時纔是如此。

+0

我認爲'script-1.sh'沒有在子進程中執行。但我發現,下面的解決方法是:'$> sh -c「。script-1.sh && ./script-2.sh」' – lef 2012-04-23 12:37:03

+1

您的解決方法與您的示例基本相同。請注意腳本1是否失敗,它不會執行腳本2。 – Kalicz 2012-04-23 13:52:03