2011-06-29 20 views
3

私はLinuxシェルスクリプト(foo.shなど)で単純なコマンドを使用しています。それは私が変数を取得しようとするが、値が空白で終了するとスクリプトが終了した後にエクスポートされる変数が空白になるのはなぜですか?

> sh foo.sh 

:私はスクリプトを実行

export INSTALL_DIR=/mnt/share/TEST_Linux 

:それで、私はこれを行います。

> echo $INSTALL_DIR 

コマンドを直接入力すると、エクスポートされたvarは開いている端末ウィンドウに対してグローバルになります。私はUbuntuを使用しています。

答えて

7

環境変数の設定は、スクリプトを実行する子bashプロセスにとってローカルです。あなたが望むものを達成するには、ソースが必要です:source foo.sh。それはあなたの主なbashプロセスによって実行されることを意味します。次に、スクリプトの終了後に変数の設定が残ります。

4

変数は、の新しいシェルでのみエクスポートされます。おそらくsourceでスクリプトを実行したいと思うでしょう。

source foo.sh 
1

私は答えは分かりませんが、私はそれを克服する方法を知っています。

# source ./foo.sh 
# echo $INSTALL_DIR 

これは魔法のようです。

私はそれが自分自身の "シェル"で実行されるためだと思います。わからない。

1

実行中のプロセス(スクリプトを実行しているシェル)は何でも実行できますが、そのアクションは親プロセス(現在のシェル)には影響しません。

私は5テキーラショットを取ることができ、私の環境はぼやけてしまい、重力の法則が私の知覚によって影響を受けることになります。しかし、私の父親には、彼の環境は同じです、私の行動のために彼は酔っていません。

スクリプト内で作成/変更された変数が現在のシェルに影響を与えたい場合は、sourceという別の答えが指摘されています。スクリプトがcd /whatever/pathを実行し、他の機能が設定されているが変更または削除されている場合は、シェル内の同じ方法で影響を受けることになります。

私は5テキラショットを取ると、私の父が私を殺して私の血を飲むと、本当に変わった、あまり良くない類推があります。

私は混乱していますか? ;-)

+2

テキーラのソースがある場合、あなたの父親は酔ってしまうでしょう。 –

関連する問題