ฉันมีไฟล์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