আমার একটি বাশ স্ক্রিপ্ট রয়েছে যা ব্যবহার করে set -o errexit
যাতে ত্রুটিযুক্ত হয়ে পুরো স্ক্রিপ্টটি ব্যর্থতার পয়েন্টে উপস্থিত হয়।
স্ক্রিপ্টটি একটি curl
কমান্ড চালায় যা কখনও কখনও উদ্দিষ্ট ফাইলটি পুনরুদ্ধার করতে ব্যর্থ হয় - তবে যখন এটি ঘটে তখন স্ক্রিপ্টটি প্রস্থান করতে ত্রুটি করে না।
আমি একটি for
লুপ যুক্ত করেছি
- কয়েক সেকেন্ডের জন্য বিরতি দিন তারপর
curl
কমান্ডটি আবার চেষ্টা করুন false
ডিফল্ট অ-শূন্য প্রস্থান স্থিতি সংজ্ঞায়িত করতে লুপের নীচে ব্যবহার করুন - কার্ল কমান্ড সফল হলে - লুপটি বিরতি এবং শেষ কমান্ডের প্রস্থান স্থিতি শূন্য হওয়া উচিত।
#! /bin/bash
set -o errexit
# ...
for (( i=1; i<5; i++ ))
do
echo "attempt number: "$i
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
if [ -f ~/.vim/autoload/pathogen.vim ]
then
echo "file has been retrieved by curl, so breaking now..."
break;
fi
echo "curl'ed file doesn't yet exist, so now will wait 5 seconds and retry"
sleep 5
# exit with non-zero status so main script will errexit
false
done
# rest of script .....
সমস্যাটি যখন curl
কমান্ড ব্যর্থ হয়, লুপটি পাঁচবার কমান্ডটি পুনরায় চেষ্টা করে - যদি সমস্ত প্রচেষ্টা ব্যর্থ হয় তবে লুপ শেষ হওয়ার জন্য এবং মূল স্ক্রিপ্টটি পুনরায় শুরু হয় - পরিবর্তে ট্রিগার না করে errexit
।
এই curl
বিবৃতি ব্যর্থ হলে আমি কীভাবে পুরো স্ক্রিপ্টটি প্রস্থান করতে পারি?
true
যে ব্রেক স্টেটমেন্টটি স্পষ্ট করে দেওয়া এবং লুপটির প্রস্থান মূল্য নিশ্চিত করা আগে রাখা ভাল ধারণা হবে?