1
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 から出力を取得して終了するだけです

4

1 に答える 1

0

これを入力ファイルとして再試行してください。

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

(余談:引用符を使用してください!)

于 2013-10-13T02:42:35.403 に答える