J'ai un script bash qui utilise de set -o errexit
sorte qu'en cas d'erreur, le script entier se termine au point d'échec.
Le script exécute une curl
commande qui ne parvient pas parfois à récupérer le fichier prévu - cependant, lorsque cela se produit, le script ne quitte pas l'erreur.
J'ai ajouté une for
boucle à
- faire une pause de quelques secondes puis réessayer la
curl
commande - utilisez
false
au bas de la boucle for pour définir un état de sortie non nul par défaut - si la commande curl réussit - la boucle se brise et l'état de sortie de la dernière commande doit être zéro.
#! /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 .....
Le problème est que lorsque la curl
commande échoue, la boucle réessaye cinq fois - si toutes les tentatives échouent, la boucle for se termine et le script principal reprend - au lieu de déclencher le errexit
.
Comment puis-je obtenir la fermeture du script entier si cette curl
instruction échoue?
true
avant l'instruction break pour être explicite et garantir la valeur de sortie de la boucle?