我有一个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语句放在显式位置并确保循环的退出值是个好主意吗?