쉘 스크립트의 오류가 발생한 곳에서 비정상적으로 종료하고 싶습니다.
1556 단어 ShellScriptBash
도전
쉘 스크립트는, 도중의 커멘드로 에러가 발생해도 그 자리에서는 종료하지 않고, 게다가 쉘 스크립트 자체의 종료 스테이터스도 0 (正常終了)
입니다.
예를 들어, 다음 쉘 스크립트는 중간 false
명령이 오류를 반환하지만 마지막 echo "[Finish]"
가 실행 중이며 종료 상태도 0 (正常終了)
입니다.
test1.sh#!/bin/bash
false
echo "[Finish]"
$ ./test1.sh; echo $?
[Finish]
0
이것은 올바른 거동이지만 경우에 따라
#!/bin/bash
false
echo "[Finish]"
$ ./test1.sh; echo $?
[Finish]
0
라고 하는 일도 있습니다.
다음은 해결책입니다.
해결책
1. shebang 에 -e 옵션을 붙인다
test2.sh#!/bin/bash -e
false
echo "[Finish]"
$ ./test2.sh; echo $?
1
도중에 이상종료 ( 예상대로 )
2. set -e 명령
test3.sh#!/bin/bash
set -e
false
echo "[Finish]"
$ ./test3.sh; echo $?
1
도중에 이상종료 ( 예상대로 )
Reference
이 문제에 관하여(쉘 스크립트의 오류가 발생한 곳에서 비정상적으로 종료하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rtakasuke/items/fd35ef60370e3d8c225d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#!/bin/bash -e
false
echo "[Finish]"
$ ./test2.sh; echo $?
1
#!/bin/bash
set -e
false
echo "[Finish]"
$ ./test3.sh; echo $?
1
Reference
이 문제에 관하여(쉘 스크립트의 오류가 발생한 곳에서 비정상적으로 종료하고 싶습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rtakasuke/items/fd35ef60370e3d8c225d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)