У мене є файл 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