Ich habe eine Datei servers.txtmit einer Liste von Servern:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
wenn ich die datei zeilenweise mit lese whileund jede zeile wiederhole, funktioniert alles wie erwartet. Alle Zeilen werden gedruckt.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Wenn ich jedoch zu allen Servern sshen und einen Befehl ausführen möchte, whilefunktioniert meine Schleife plötzlich nicht mehr:
$ 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
Dies stellt nur eine Verbindung zum ersten Server in der Liste her, nicht zu allen. Ich verstehe nicht, was hier passiert. Kann jemand bitte erklären?
Dies ist noch seltsamer, da die Verwendung der forSchleife gut funktioniert:
$ 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
Es muss etwas Besonderes sein ssh, da andere Befehle gut funktionieren, wie zum Beispiel ping:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible