servers.txt
サーバーのリストを含むファイルがあります:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
ファイルをwhile
1行ずつ読み取り、各行をエコーすると、すべて正常に機能します。すべての行が印刷されます。
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
ただし、すべてのサーバーにsshしてコマンドを実行すると、突然while
ループが機能しなくなります。
$ while read HOST ; do ssh $HOST "uname -a" ; done < servers.txt
Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
これは、リストの最初のサーバーのみに接続し、すべてのサーバーには接続しません。ここで何が起こっているのか分かりません。誰か説明してもらえますか?
for
ループを使用するとうまく機能するため、これはさらに奇妙です。
$ for HOST in $(cat servers.txt ) ; do ssh $HOST "uname -a" ; done
Linux server1 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Linux server2 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
Linux server3 2.6.30.4-1 #1 SMP Wed Aug 12 19:55:12 EDT 2009 i686 GNU/Linux
次のようなssh
他のコマンドは正常に動作するため、に固有のものである必要がありますping
。
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible