मेरे पास एक बैश स्क्रिप्ट है, जो 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कि ब्रेक स्टेटमेंट को स्पष्ट करने और लूप के निकास मान को सुनिश्चित करने से पहले इसे रखना एक अच्छा विचार होगा ?