계속하는 대신 마지막으로 실패한 명령의 오류 코드로 종료해야 하는 bash 스크립트를 작성 중입니다. Everywhere 를 추가하면 이 작업을 수행할 수 있지만 , 보기 흉한 모든 줄 없이 이 작업을 수행하기 위해 처음에 옵션을 선택하는 || exit $?
것과 같은 더 쉬운 방법이 있습니까 ?set
답변1
set -e
?
set: set [-abefhkmnptuvxBCHP] [-o option-name] [--] [arg ...]
Set or unset values of shell options and positional parameters.
Change the value of shell attributes and positional parameters, or
display the names and values of shell variables.
Options:
-a Mark variables which are modified or created for export.
-b Notify of job termination immediately.
-e Exit immediately if a command exits with a non-zero status.
...
답변2
블록 끝에서 &&
사용하여 모든 명령을 연결할 수 있습니다. || exit $?
예를 들어:
#!/usr/bin/ksh
ls ~/folder &&
cp -Rp ~/folder ~/new_folder &&
rm ~/folder/file03.txt &&
echo "This will be skipped..." ||
exit $?
파일이 없으면 ~/folder/file03.txt
마지막 명령을 건너뜁니다. echo
다음과 같은 내용을 받아야 합니다.
$ ./script.ksh
file01.txt file02.txt
rm: cannot remove /export/home/kkorzeni/folder/file03.txt: No such file or directory
$ echo $?
1
감사합니다, 크시슈토프
답변3
스크립트에서 발생하는 모든 오류를 포착하기 위해 트랩 기능을 정의할 수 있습니다.
#!/usr/bin/ksh
trap errtrap
function errtrap {
es=$?
echo "`date` The script failed with exit status $es " | $log
}
나머지 스크립트는 다음과 같습니다.
TRAP은 모든 명령에 대한 오류를 포착하고 이 errtrap
함수를 호출합니다. 더 나은 사용을 위해 errtrap
함수를 일반으로 만들고 생성한 스크립트에서 호출할 수 있습니다.