У меня есть сценарий Bash, который использует set -o errexit
так, чтобы в случае ошибки весь сценарий выходил в точке сбоя.
Сценарий запускает curl
команду, которая иногда не может получить нужный файл - однако, когда это происходит, сценарий не завершается с ошибкой.
Я добавил for
цикл в
- сделать паузу на несколько секунд, затем повторить
curl
команду - используйте
false
в нижней части цикла for для определения ненулевого состояния выхода по умолчанию - если команда curl выполнена успешно - цикл прерывается, и состояние выхода последней команды должно быть равно нулю.
#! /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
сбое команды цикл повторяет команду пять раз - если все попытки не удаются, цикл for завершается и основной сценарий возобновляется - вместо запуска errexit
.
Как я могу получить весь скрипт для выхода, если этот curl
оператор не выполняется?
true
перед оператором break явное и обеспечить выходное значение цикла?