मेरे पास 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