シェルスクリプトを介して親シェルから子シェルに変数を渡す

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 $