シェルスクリプトを介して親シェルから子シェルに変数を渡す
Aug 24 2020
親シェル(ルート)で以下を実行します:
SESSION_RECORD=started
出力:
echo $SESSION_RECORD
started
しかし、シェルスクリプトからステータスを確認すると、値が割り当てられていません。子を作成してスクリプトを実行することを認識しています。そのため、変数を取りません。
親シェルから子シェルにインポートする方法はありますか?ルート変数は動的であるため、エクスポートは使用しません。
参照用のスクリプト:
#!/bin/bash
session=`echo $SESSION_RECORD`
echo $session if [ "$session" == "started" ]
then
echo "screen records"
else
echo "screen not started"
fi
基本的に、私のスクリプトは変数の値をチェックし、それが一致する場合はループに入り、さらにコマンドを実行する必要があります。
変数の値はSESSION_RECORD
動的に変化するため、値に基づいてスクリプトを実行する必要があります。
回答
2 seumasmac Aug 24 2020 at 18:28
変数をエクスポートするときに、変数の値を設定する必要はありません。できるよ:
SESSION_RECORD=started
echo "Now some other stuff"
export SESSION_RECORD && ./myscript
の現在の値をSESSION_RECORD
スクリプトにエクスポートします。
Invidian Aug 24 2020 at 17:59
スクリプトを関数にすると、実行中にサブシェルが作成されないため、変数へのアクセスは問題なく機能するはずです。多分それはあなたのために働くだろうか?
例:
$ cat test.sh #!/bin/bash function foo() { echo $foo
}
$ source test.sh $ foo=5
$ foo 5 $ foo=4
$ foo 4 $