দ্রষ্টব্য: এখানে প্রশ্নের দুটি স্তর রয়েছে। একটি হ'ল আমি এসএসএইচ এর মাধ্যমে অ্যাক্সেসযোগ্য দূরবর্তী সার্ভারে একটি তুচ্ছ-তুচ্ছ কাজ সম্পাদন করতে চাই '। অন্যটি হ'ল আমি একটি কমান্ডের কাছে একটি জটিল স্ট্রিং দেওয়ার চেষ্টা করছি এবং যুক্তিটি আমার উদ্দেশ্য থেকে পৃথক হয়ে গেছে ' আমি উচ্চ-স্তরের প্রশ্নের সমাধানের জন্য ব্যবহৃত পদ্ধতির "সঠিক" (সুবিধাজনক, অ-ত্রুটি-প্রবণ, সুরক্ষিত ইত্যাদি) কিনা তা আলোচনা না করেই নিম্ন-স্তরের প্রশ্নের উত্তর দিচ্ছি। অন্যান্য উত্তর এবং মন্তব্য দ্বারা ইঙ্গিত হিসাবে, সম্ভবত এটি সম্ভবত না।
আপনার কমান্ড লাইন বেশিরভাগই সঠিক; আপনাকে কেবল উদ্ধৃতিটি কিছুটা পরিবর্তন করতে হবে।
মূল সমস্যাটি হ'ল ডাবল-কোটেড স্ট্রিংগুলি আপনার স্থানীয় শেল দ্বারা প্রসারিত হয়, এবং সুতরাং $(...)
অংশগুলি আপনার স্থানীয় সিস্টেমে মূল্যায়ন করা হবে। এগুলি দূরবর্তী সিস্টেমে পাস করার জন্য, আপনাকে স্ক্রিপ্টটি একক উদ্ধৃতিতে আবদ্ধ করতে হবে।
আপনার কিছু এম্বেডেড উদ্ধৃতি চিহ্ন রয়েছে। আপনার মূল স্ক্রিপ্টে, দু'জনের পক্ষে যুক্তি রয়েছে echo
; আপনি যদি বাইরের উক্তিটি একক উদ্ধৃতিতে পরিবর্তন করেন তবে এটি অ্যাজ স্ক্রিপ্ট হবে। এই কার্যকরভাবে কোটেশন চিহ্নগুলি বাদ দেওয়া হয়েছে যার ফলে এটিগুলি বিরক্ত হয় না echo
, তবে এটি অর্ক স্ক্রিপ্টকে বিশৃঙ্খলা করবে, কারণ বৃহত্তর চিহ্নটি আউটপুট পুনঃনির্দেশে পরিণত হবে। সুতরাং আপনি বাহ্যিক উদ্ধৃতি চিহ্নগুলি একক উদ্ধৃতিতে পরিবর্তন করার পরে সেগুলি ডাবল কোটে পরিবর্তন করুন।
এই উদ্ধৃতি স্থির সঙ্গে আপনার স্ক্রিপ্ট। স্ক্রিপ্টে অন্যান্য সমস্যা থাকতে পারে, আমি কেবল বাক্য গঠন ঠিক করেছি fixed
#!/bin/bash
ssh -t test@192.168.94.139 'cd /var/www/test.com/backup ;
if [ $(ls | wc -l) -lt 3 ]
then
echo "Less"
else [ $(ls -t *.tgz|awk "NR >3"|xargs rm -f) ]
echo "deleted"
fi'