2013-06-27 4 views
5

私が読んだところでは、setenvのcshとexportのbashは同等です。しかし、私は2つの作業中にいくつかの奇妙な問題を発見しました。cshの "setenv"とbashの "export"の範囲

私はパテを開き、入力を開始すると:私は逆の順序でそれを行う場合

setenv TEMP yes 
echo $TEMP //this give me "yes" 

が、私は、しかし

echo $TEMP //this give me "yes" as well 

をたたきと入力して行く、それは明らかにしませんでした同じ結果。私は最初のbashと

export TEMP=no 
echo $TEMP //this give me "no" 

を入力するために行くときに具体的に、私は戻ってCSHに行くと

echo $TEMP // this give me "Undefined Variable" 

を入力し、それは同様に「ノー」私を与えるべきではないでしょうか。何か不足していますか?

ありがとうございました!

+1

「私はcshに戻ってきます」とはどういう意味ですか?正確に "cshに戻る"と入力するのは何ですか? – rici

+0

cshは私のログインシェルですので、私がbashで "exit"と入力すると、cshに戻ります。 –

+2

右。変数をエクスポートすると、変数は子にエクスポートされますが、親にはエクスポートされません。 「exit」と入力すると、すべての変数が消えます。 – rici

答えて

8

変数をエクスポートするということは、その変数のコピーが、新しく作成された子プロセスの環境に置かれることを意味します。これは変数のコピーです。子プロセスが変数を変更すると、親プロセスは変更を認識しません。さらに、子が変数をエクスポートする場合、変数は親変数で表示されません。

したがって、あなたの2つのケースは非対称です。 cshで起動し、変数をエクスポートしてbashを起動すると、bashはエクスポートされた変数を表示します。新しい変数をbashでエクスポートしてbashから終了すると、cshに戻ると、bashセッションで作成されたすべての変数が消えます。

bashで変数をエクスポートしてから、子のcsh(cshと入力)を起動すると、エクスポートされた変数がほぼ確実に表示されます。

+0

多くの意味があります!ありがとうございました! –