Tôi có một tập tin servers.txt, với danh sách các máy chủ:
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Khi tôi đọc từng dòng tệp whilevà lặp lại từng dòng, tất cả đều hoạt động như mong đợi. Tất cả các dòng được in.
$ while read HOST ; do echo $HOST ; done < servers.txt
server1.mydomain.com
server2.mydomain.com
server3.mydomain.com
Tuy nhiên, khi tôi muốn ssh tới tất cả các máy chủ và thực thi một lệnh, đột nhiên whilevòng lặp của tôi ngừng hoạt động:
$ 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
Điều này chỉ kết nối với máy chủ đầu tiên trong danh sách, không kết nối với tất cả chúng. Tôi không hiểu chuyện gì đang xảy ra ở đây. Ai đó có thể vui lòng giải thích?
Điều này thậm chí còn lạ, vì sử dụng forvòng lặp hoạt động tốt:
$ 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
Nó phải là một cái gì đó cụ thể ssh, bởi vì các lệnh khác hoạt động tốt, chẳng hạn như ping:
$ while read HOST ; do ping -c 1 $HOST ; done < servers.txt
ansible