Mam plik servers.txt
z listą serwerów:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
kiedy czytam plik linia po linii while
i echo każdej linii, wszystko działa zgodnie z oczekiwaniami. Wszystkie linie są drukowane.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Jednak gdy chcę ssh do wszystkich serwerów i wykonać polecenie, nagle moja while
pętla przestaje działać:
$ 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
To łączy się tylko z pierwszym serwerem na liście, a nie z wszystkimi. Nie rozumiem, co się tutaj dzieje. Czy ktoś może wyjaśnić?
Jest to nawet dziwniejsze, ponieważ użycie for
pętli działa dobrze:
$ 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
Musi to być coś konkretnego ssh
, ponieważ inne polecenia działają dobrze, takie jak ping
:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible