同時に実行されている 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
決してこれまで1
2 行がどのような順序で実行されるか、または同時に実行されるかに関係なく、出力として書き込みます。
2 行目が出力されるのは、それを呼び出す環境で1
環境変数 (エクスポートされたシェル変数) が呼び出されている場合のみです。a