master1: /tmp> cat example.txt
server1 ls
server2 ls
server3 ls
以下を達成したい、
master1:/tmp> cat example.txt|while read a b
do
ssh $a $b
done
問題 : server1 から出力を取得して終了するだけです
これを入力ファイルとして再試行してください。
server1 cat
server2 cat
server3 cat
次の出力が表示されます。
server2 cat
server3 cat
なんで?最初のssh
コマンドは標準入力をキャプチャし、EOF まで読み取るためです。使い果たさread
れると、ループも閉じます。
簡単な修正は、-n
フラグを使用して、標準入力を内部的ssh
に使用するように指示することです。/dev/null
while read host cmd; do
ssh -n "$host" "$cmd"
done < file
(余談:引用符を使用してください!)