2012-05-05 7 views
1

スクリプト内から変数をエクスポートすることさえできません。私のbashでうまく動作します - 何が間違っていますか?bashはエクスポート変数を忘れます

ファイルtest.sh

#!/bin/bash 
echo $ttt 
ttt="fffalse" 
export ttt 
echo $ttt 

bashのテスト:

[email protected]:~/temp$ export ttt="tttrue" 
[email protected]:~/temp$ ./test.sh 
tttrue 
fffalse 
[email protected]:~/temp$ ./test.sh 
tttrue 
fffalse 
[email protected]:~/temp$ 

編集:

私は今、これが動作しないことに、答えから知っています。 1つの変数をプロセス間でどのように記憶させることができますか?ファイルに保存する必要がありますか?

+0

+1を。悪いbash! :))) – yazu

答えて

2

./test.shを実行する各シェルスクリプトは、実際には、親シェルのsubprocess(子プロセス)であるbash test.sh

と同じです。
サブプロセスは、env-varをその親にエクスポートできません。


あなたは、この(同じ環境で実行)してみてください:タイトル

. test.sh 
+0

"。test.sh'"は実際に働いています - ありがとう。これは何を意味するのでしょうか?それは現在のシェルで実行され、子供としてではありませんか? – hpekristiansen

+1

@ Hans-PeterE.Kristiansen ' test.sh'は 'source test.sh'と全く同じです。これは、インタプリタが' test.sh'から各行を取り出し、現行のスクリプト*に入力したかのように現在の環境*で実行することを意味します。 'C 'に精通しているなら、' #include "file.h" 'を実行するときにプリプロセッサがやっていることと多少似ています。このリンクを参照してください:(http://ss64.com/bash/period.html) – mgilson

3

exportは、現在のプロセスとその後に生成される子プロセスで動作します。プロセスの境界(親、既存の子プロセス、無関係なプロセス)を越えて機能しません。環境は、ファイルシステムやメールボックスのようなものではなく、一種の影引数リストのように動作します。

関連する問題