বিবেচনা করুন set -e।
যদি এটি কোনও স্ক্রিপ্টে থাকে, তবে আপনি সম্ভবত if... thenপুরোপুরি সরিয়ে ফেলতে চাইবেন এবং কেবল set -eস্ক্রিপ্টের শীর্ষে রাখবেন। এর ফলে কোনও কমান্ড ব্যর্থ হলে স্ক্রিপ্টটি সঙ্গে সঙ্গেই বন্ধ হয়ে যায় stop যখন এই rsyncকমান্ডগুলির মধ্যে কোনওটি ব্যর্থ হয়, তখন তারা ব্যর্থতার ব্যাখ্যা করে ত্রুটি বার্তা প্রদর্শন করবে, সুতরাং আপনাকে সম্ভবত নিজের বার্তা লেখার দরকার নেই।
আপনি যদি চালানোর আগে চালিত কমান্ডগুলি প্রদর্শন করতে চান তবে ব্যবহার করুন set -x। আপনি দুটি লিখে একত্রিত করতে পারেন set -ex।
সাথে &&, আপনার দরকার নেই \।
আপনি যদি যা দেখিয়েছেন সেটির লাইনে কিছু লিখতে সিদ্ধান্ত নেন, তবে রনি ব্লোমে যেমন বলেছেন আপনি কমান্ডগুলি এর সাথে আলাদা করতে পারেন &&। মনে রাখবেন যে, আপনি কমান্ড চালানোর জন্য প্রয়োজন হবে না subshells , অর্থাত্, আপনি না তাদের মধ্যে ঘিরা প্রয়োজন প্রথম বন্ধনী ।
আপনি যদি &&কোনও লাইনের শেষে অপারেটর লেখেন তবে \লাইন ধারাবাহিকতা নির্দিষ্ট করতে আপনাকে লেখার দরকার নেই । কোনও কমান্ড &&(লজিকাল ও ) বা ||(লজিকাল ওআর ) এ শেষ হতে পারে না যাতে শেলটি পরবর্তী লাইনে পার্স করা অবিরত থাকবে।
if
rsync "$folder/coopshop/prod" "$folder2/coopshop" &&
rsync "$folder/coopweb/prod" "$folder2/coopweb" &&
rsync "$folder/unihobbyshop/shop" "$folder2/unihobbyshop" &&
rsync "$folder/unnihobbyweb/web" "$folder2/unihobbyweb"
then
echo 'OK! rsync commands completed successfully!'
else
echo 'Error! some rsync command failed!'
fi
আপনাকে &&কোনও লাইনের শেষে রাখতে হবে না । আপনি চাইলে একই লাইনে একাধিক কমান্ড লিখতে &&পারেন।
নোট করুন যে পরীক্ষা করা হচ্ছে চূড়ান্ত কমান্ড শেষ হয় না &&কারণ কমান্ড && পৃথক করে। যদি কোনও কমান্ড ব্যর্থ হয়, অন্যগুলি চলবে না।
কিছু কমান্ড ব্যর্থ হলেও সমস্ত কমান্ড চালানো
পরিবর্তে আপনি সব চালাতে চান পারে rsyncকমান্ড এমনকি যদি তাদের কিছু ব্যর্থ, তারপর পরীক্ষা যদি কোনো তাদের ব্যর্থ হয়েছে এবং সেই অনুযায়ী কাজ করে। এই জন্য, আপনি ফাঁদ পেতে পারেন ERR। এটি প্রকৃত সংকেত নয়, তবে ERRব্যাশ-এর সিগন্যাল_স্পেক কমান্ডগুলি ক্যাচ করে যা কোনও ক্র্যাশ সহ (এবং সাইন ইন সহ) কোনও কারণে ব্যর্থ হয়। দেখুন pLumo এর উত্তর (কিন্তু বাদ set -eবর্তা) এবং উইলিয়াম Pursell দ্বারা পোস্টটি ; আরও সাধারণ তথ্যের জন্য, এর ফলাফল দেখুন help trap।
আমি যেভাবে এটি করতে পছন্দ করি (আপনার প্লাগ ইন করার মতো কমান্ড সহ):
failed=
trap 'failed=yes' ERR
rsync "$folder/coopshop/prod" "$folder2/coopshop"
rsync "$folder/coopweb/prod" "$folder2/coopweb"
rsync "$folder/unihobbyshop/shop" "$folder2/unihobbyshop"
rsync "$folder/unnihobbyweb/web" "$folder2/unihobbyweb"
if [ -z "$failed" ]; then
echo 'OK! rsync commands completed successfully!'
else
echo 'Error! some rsync command failed!'
fi
আমি যে অন্যান্য পরিবর্তনগুলি করেছি ... এবং সত্যই কি পরীক্ষা করে Aboutif command
আপনার যুক্তিগুলি প্যারামিটার সম্প্রসারণটিrsync ব্যবহার করার জন্য তাই আমি সেগুলি ডাবল-কোট করার স্বাধীনতা নিয়েছি । অন্যথায় শব্দ বিভাজন এবং গ্লোববিং সম্পাদন করা হবে। প্রসঙ্গ থেকে এটি প্রদর্শিত হয় আপনি এই অতিরিক্ত বিস্তৃতি চান না। ( সাধারণত আপনি না। )
মনে রাখবেন, আপনার স্ক্রিপ্টটি যে বার্তা প্রিন্ট করে তার বিপরীতে, কোনও rsyncকমান্ড ক্র্যাশ হয়েছে কিনা তা আপনি আসলে পরীক্ষা করছেন না । এর পরিবর্তে কোনও rsyncকমান্ড ব্যর্থ হলে আপনি পরীক্ষা করছেন । ক্র্যাশিং হ'ল অস্বাভাবিক প্রোগ্রামের সমাপ্তি, যেখানে কোনও বাগ বা শর্তের কারণে যথাযথভাবে পরিচালনা করা যায় না এমন সংকেত দ্বারা কোনও প্রক্রিয়া সমাপ্ত হয়। এটি সাধারণ প্রোগ্রামের সমাপ্তির চেয়ে বিরল, যা নিজেই একটি প্রস্থান স্থিতি হতে পারে যা সাফল্য (শূন্য) বা ব্যর্থতা (অন্য কোনও সংখ্যা) নির্দেশ করে। যদি rsync করে ক্র্যাশ, উপরের কোড হবে খুব যে ধরা। বাস্তবে এটি যা ধরা দিচ্ছে তার বেশিরভাগটি হ'ল ব্যর্থতার ইঙ্গিত সহ একটি প্রস্থান স্থিতি সহ সাধারণ প্রোগ্রাম সমাপ্তি।