我有一个文件servers.txt
,其中包含服务器列表:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
当我逐行读取文件while
并回显每一行时,所有文件均按预期工作。所有行均已打印。
$ 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