set -o errexit
오류가 발생하면 전체 스크립트가 실패 시점에 종료되도록 사용하는 bash 스크립트 가 있습니다.
스크립트는 curl
의도 한 파일을 검색하지 못하는 명령을 실행 하지만,이 경우 스크립트는 오류 종료에 실패하지 않습니다.
for
루프를 추가했습니다
- 몇 초 동안 일시 중지 한 후
curl
명령 을 다시 시도하십시오. - 사용
false
기본 0이 아닌 종료 상태를 정의하는 for 루프의 맨 아래에 - 컬 명령이 성공하면 - 루프 휴식과 마지막 명령의 종료 상태를 0이어야합니다.
#! /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 문 앞에 명시 적으로 명시하고 루프의 종료 값을 확보 하는 것이 좋은 생각이라고 생각하십니까 ?