Ho un file servers.txt
, con un elenco di server:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
quando leggo il file riga per riga while
ed echo ogni riga, tutto funziona come previsto. Tutte le linee sono stampate.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Tuttavia, quando voglio ssh su tutti i server ed eseguire un comando, improvvisamente il mio while
ciclo smette di funzionare:
$ 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
Questo si collega solo al primo server nell'elenco, non a tutti. Non capisco cosa sta succedendo qui. Qualcuno può spiegare per favore?
Questo è ancora più strano, poiché l'utilizzo di for
loop funziona bene:
$ 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
Deve essere qualcosa di specifico ssh
, perché altri comandi funzionano bene, come ping
:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible