Substituir:
done
com:
done || exit 1
Isso fará com que o código seja encerrado se o loop for
sair com um código de saída diferente de zero.
Como ponto de trivialidade, o 1
in exit 1
não é necessário. Um comando exit
simples sairia com o status de saída do último comando executado, que seria false
(code = 1) se o download falhar. Se o download for bem-sucedido, o código de saída do loop será o código de saída do comando echo
. echo
normalmente sai com código = 0, com sinal de sucesso. Nesse caso, o ||
não é acionado e o comando exit
não é executado.
Por fim, observe que set -o errexit
pode ser cheio de surpresas. Para uma discussão de seus prós e contras, consulte Perguntas frequentes de Greg # 105 .
Documentação
De man bash
:
for (( expr1 ; expr2 ; expr3 )) ; do list ; done
First, the arithmetic expression expr1 is evaluated according the rules described below under ARITHMETIC EVALUATION. The arithmetic expression expr2 is then evaluated repeatedly until it evaluates to zero. Each time expr2 evaluates to a non-zero value, list is executed and the arithmetic expression expr3 is evaluated. If any expression is omitted, it behaves as if it evaluates to 1. The return value is the exit status of the last command in list that is executed, or false if any of the expressions is invalid. [Emphasis added]