私は現在のスクリプトのコードの次の行を有する:KSHでSSHをループするより効率的な方法は?
set -A ARRAY OPTION1 OPTION2 OPTION3 OPTION4
set -A matches
for OPTION in ${ARRAY[@]}; do
DIFF=$(ssh [email protected]$host " diff $PERSONALCONF $PRESETS$OPTION")
if [[ $DIFF == "" ]]; then
set -A matches"${matches[@]}" $OPTION
fi
done
基本的に、私は、事前に定義された配列の各要素を通過するループを有する、遠隔サーバ(同じサーバ毎時間)に接続次に、diffコマンドを使用してループで定義されたファイルとファイルを比較します。基本的には、personal.confファイルをpersonal.conf.option1、personal.conf.option2などと比較します。違いがなければ、配列に追加します。違いがある場合、何も起こりません。
SSH経由で一度だけ接続することで、これを実行するか、同じ結果(接続先のサーバーではなく、ホストマシン上の配列に一致するファイルを格納する)が可能かどうか疑問に思っていました。私はリモートサーバに何も保存することはできませんし、そのサーバ上でリモートスクリプトを実行することもできません。私はssh(愚かなセットアップの一種)を介してのみコマンドを発行することができます。現在、オプションの数だけ接続します。これは非効率的と思われる。もし誰かがより良い解決策を持っていれば、私はそれを聞いてみたいと思う。
それは本当に、アレイ内のすべてのオプションを実行していることを確認するように注意してください:接続の再利用を可能にするモジュール。 dev/nullをssh呼び出しの最後に追加しないと、最初の呼び出しの後にループ内のsshが(私の経験上)終了します。 –