রিমোট এসএসএইচ এর উপর লুপ


12

আমার একটি স্ক্রিপ্টে নিম্নলিখিত রয়েছে

for server in ${servers[@]}; do
    echo ${server}
    ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done"
done

কিন্তু এটি কাজ করে না। অদ্ভুত জিনিস, আমি দেখছি। আমি রিটার্ন লাইনের পরিমাণ। আমার কাছে যদি দশটি ফাইল থাকে তবে আমি দশটি ফাঁকা লাইন দেখতে পাচ্ছি।


এছাড়াও দেখুন গনুহ সমান্তরাল এর --sshlogin বিকল্প।
সেবাস্তিয়ান

উত্তর:


19

আপনার স্থানীয় শেল ${i}ডাবল কোট ( ") এর মধ্যে ব্যাখ্যা করে , তাই কমান্ডটি কার্যকর হয়

ssh user@some.serv.er "for i in /tmp/foo* ; do echo; done"

'পরিবর্তে কেবল একক উদ্ধৃতি ( ) ব্যবহার করুন এবং আপনার সমস্যাটি অদৃশ্য হয়ে যাবে:

ssh user@${server} 'for i in /tmp/foo* ; do echo $i; done'

1

কিছুটা পিছনে এই সমস্যার মধ্যে দৌড়ে এসেছিলেন এবং প্রদত্ত সমাধানটি কার্যকর হয়েছে যখন আপনি যদি স্থানীয় শেল থেকেও ভেরিয়েবলগুলি টানছেন তবে ssh এর আগে আপনি পুনরাবৃত্তি করার জন্য একটি অ্যারে তৈরি করবেন। কিছুটা মেসিয়ার কিছুটা হলেও পালাতে হবে $ প্রথমদিকে তাই হবে

"for i in /tmp/foo* ; do echo \${i}; done"

এটি স্থানীয় কনস্ট্রাক্টের মধ্যে এড়াতে পারে, নামক এসএস শেল নয়।


0

আমিও একটি তালিকা থেকে পোর্ট পেতে উপরের উত্তর আপডেট করেছি।

for i in {10.21.xxx.yyy,10.21.xxx.yyy,10.23.xxx.yyy};
do
        for j in {5501,5502,5503,5504,7701,7702,7703,7704,5551,5552,5553,7771,7772,7773};
        do
                (echo > /dev/tcp/${i}/${j}) > /dev/null 2>&1 && echo "${i}:${j} :: it's getting connected" || echo "${i}:${j} :: it's not connecting"
        done
done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.