2012-04-23 19 views
1

私はSnow Leopardで本当に奇妙な問題に苦しんでいます。OSXエクスポートされた環境変数が子プロセスで継承されない

まず:私の端末では、私は2つのスクリプトを書いた

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

2番目のスクリプト:ターミナルで

# 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で同じシナリオを試してみましたが、期待通りに動作します。子プロセスが$MY_VARを全く知らないとOSXでは思われます。

答えて

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

+1

あなたの回避策は、あなたの例と基本的に同じです。 script-1が失敗した場合、script-2は実行されないことに注意してください。 – Kalicz

関連する問題