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