2016-09-15 2 views
0

親シェルスクリプトからその子に変数をエクスポートすることはできますか? ...シェルスクリプトでグローバル変数を子から親にエクスポートする

テストを が、それはいつも私0に戻り、2次のスクリプトを実行しようが、私はそれがI`veもエクスポートし、設定して成功なしの.bash_profileに変数のエラーを追加しようとしました。3.戻りたいです.SH @chepner同様

$ cat test.sh 
#!/bin/bash 
error=0 
./envtest.sh 
echo $error 

envtest.sh

$ cat envtest.sh 
#!/bin/bash 
source ./test.sh 
test=3 
error=$test 
echo $error 
+0

ファイルを調達しようとしましたか? 。 ./envtest.sh – kcoder24

+1

いいえ。子プロセスから親の環境に影響を与えることはできません。 – chepner

+1

"global"というフレーズを使用します。これは、おそらくエクスポートされた変数が誤解されている場所です。それらは*環境ブロック*と呼ばれるメモリブロックに存在するため、*環境変数*として知られています。各プロセスには独自の環境ブロックがあります。新しいプロセスが作成されたとき(** fork)、親から子への** **コピー**領域の1つです。したがって、子はコピーで動作しており、環境変数はグローバルでも共有でもありません。 – cdarke

答えて

0

はありません、コメントしています。あなたはtest.sh内から./envtest.shを起動すると

、新しいプロセスが/bin/bash ./envtest.shを実行するために作成され、そのプロセスの環境は親プロセスからすべての環境変数のコピーで初期化されます。 envtest.shの中で何をしても、それは自分の環境内の変数にのみ影響します。親の環境内の変数には触れません。

+0

私はそれを使用できるように私は外部ファイルに使用している変数を保存する必要があります。 – Mensch

+0

プロセス間でデータをやりとりする方法はたくさんあります。 [コマンド置換](http://tldp.org/LDP/abs/html/commandsub.html)、[プロセス置換](http://tldp.org/LDP/abs/html/process-sub。 html)、[I/Oリダイレクションとパイピング](http://www.tldp.org/LDP/abs/html/io-redirection.html)、データをファイルに保存したり、データベースに保存したり、 HTTPサービスは、クライアントにデータを公開する... – dg99

関連する問題