Tengo un script bash que utiliza set -o errexit
para que, en caso de error, todo el script salga en el punto de falla.
El script ejecuta un curl
comando que a veces no puede recuperar el archivo deseado; sin embargo, cuando esto ocurre, el script no sale por error.
He agregado un for
bucle a
- pausa por unos segundos y luego vuelve a intentar el
curl
comando - use
false
en la parte inferior del bucle for para definir un estado de salida predeterminado distinto de cero, si el comando curl tiene éxito, el bucle se rompe y el estado de salida del último comando debería ser cero.
#! /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 .....
El problema es cuando el curl
comando falla, el ciclo vuelve a intentarlo cinco veces, si todos los intentos no tienen éxito, el ciclo for finaliza y se reanuda el script principal, en lugar de activar el errexit
.
¿Cómo puedo hacer que salga el script completo si esta curl
declaración falla?
true
antes de la declaración de ruptura para ser explícito y garantizar el valor de salida del bucle?