Ich habe eine Datei servers.txt
mit einer Liste von Servern:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
wenn ich die datei zeilenweise mit lese while
und 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, while
funktioniert 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 for
Schleife 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