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