0

特定のホストのリストを実行し、これらのホストで特定のコマンドを実行する簡単なスクリプトを作成しました。スクリプトは基本的に次のようになります。

while read host; do
    ssh -f $user@$host $@
echo < servers

スクリプトを実行して、stdinからの行を「リッスン」し、$@ではなくループで実行できるようにしたいと思います。スクリプトは通常の終了(ctrl + c)によって動作を停止します。

何か案が?

4

2 に答える 2

2

私が質問を正しく読んでいるなら、あなたは一連のコマンドをたくさんのサーバーに送りたいと思うでしょう。それらはすべて単独で渡されます。

このためには、内側のループを外側の読み取りループでラップする必要があります。似たようなもの:

while read command; do
    while read host; do
        ssh -f $user@$host "$command"
        echo 
    done < servers
done

実行時にコマンドを入力すると、すべてのサーバーで実行されます。リモートシステムに送信されるシェルエスケープ文字の問題を解決することは、開発者にとっての課題です。

于 2012-06-24T10:53:38.147 に答える
0

あなたのスクリプトはすでにそれを行っています!それがどのように機能するかを理解してください-それをsome.bashファイルに保存するだけです:

user="myuser"
while read host; do
    ssh -f $user@$host $@
done

$ @は、コマンドラインから残りのパラメーターを追加することを意味します。noneを使用すると、noneが追加されます。

read hostは、単語だけでなく、行を読み取ります。

つまり、基本的に、実行すると次のようになります。

www.somehost.com
-> ssh -f myuser@www.somehost.com
www.somehost.comその他のパラメータ
-> ssh-fmyuser@www.somehost.comその他のパラメーター
于 2012-06-24T10:33:47.057 に答える