Eu tenho um script bash que usa set -o errexit
para que, por erro, o script inteiro saia no ponto de falha.
O script executa um curl
comando que às vezes falha ao recuperar o arquivo pretendido - no entanto, quando isso ocorre, o script não falha ao sair.
Eu adicionei um for
loop para
- pausar por alguns segundos e tente novamente o
curl
comando - use
false
na parte inferior do loop for para definir um status de saída diferente de zero - se o comando curl for bem-sucedido - o loop será interrompido e o status de saída do último comando deverá ser zero.
#! /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 .....
O problema é que quando o curl
comando falha, o loop tenta novamente o comando cinco vezes - se todas as tentativas forem malsucedidas, o loop for termina e o script principal é retomado - em vez de acionar o comando errexit
.
Como posso obter o script inteiro para sair se esta curl
declaração falhar?
true
antes da declaração de interrupção explícita e garantir o valor de saída do loop?