複数の bash スクリプトで変数がクロスオーバーしますか?

複数の bash スクリプトで変数がクロスオーバーしますか?

同時に実行されている bash スクリプトが 2 つありますが、2 つの点を除いて同一です。

他のいくつかのセットアップ部分とは別に、次のエントリを実行します。

ssh ${target_server} "bash -s" < ${target_script} > ${home_dir}/logs/${instance_name}.log 2> ${home_dir}/logs/${instance_name}.err &

2 つのスクリプトの唯一の違いは、変数に渡される IP アドレス${target_server}${instance_name}変数です。

展開すると次のようになります。

local_script1 の場合:

target_script="target_script1.sh"
ssh 10.1.2.3 "bash -s" < ${target_script} > /home/user/logs/script1.log 2> /home/user/logs/script1.err &

local_script2 の場合:

target_script="target_script2.sh"
ssh 10.1.2.4 "bash -s" < ${target_script} > /home/user/logs/script2.log 2> /home/user/logs/script2.err &    

target_scripts は、関連するサーバー上のパスに関連するいくつかの重要な変数を除いて同一の 2 つの別々の bash ファイルです。

別々のサーバー上で実行されているにもかかわらず、設定されている変数が一部重複している可能性はありますか。

例えば、私がmyVar=1そこに着いたらtarget_script1、それを拾ってもらうことはできますかtarget_script2

または (私の考えは正しいでしょうか)、それぞれが最初に「リモート」サーバーへの SSH 接続を開いているため、変数はリモート サーバーにのみ存在し、ローカル サーバーには存在しないということです。

答え1

いいえ、1 つのスクリプト内で設定された変数は、別のスクリプトでは表示されません。両方のスクリプトは、それぞれ別の環境で実行されています。

例:

bash -c 'a=1; echo $a'

bash -c 'echo $a'

2回目の呼び出しはbash決してこれまで12 行がどのような順序で実行されるか、または同時に実行されるかに関係なく、出力として書き込みます。

2 行目が出力されるのは、それを呼び出す環境で1環境変数 (エクスポートされたシェル変数) が呼び出されている場合のみです。a

関連情報