
set -e 명령은 명령이 0이 아닌 종료 코드를 반환하는 경우 bash 스크립트가 즉시 실패하도록 만듭니다.
스크립트 내의 개별 명령에 대해 이 동작을 비활성화하는 쉽고 우아한 방법이 있습니까?
Bash 참조 매뉴얼(http://www.gnu.org/software/bash/manual/bashref.html)?
답변1
이 같은:
#!/usr/bin/env bash set -e echo hi # disable exitting on error temporarily set +e aoeuidhtn echo next line # bring it back set -e ao echo next line
달리다:
$ ./test.sh hi ./test.sh: line 7: aoeuidhtn: command not found next line ./test.sh: line 11: ao: command not found
set
내장 도움말 에 설명되어 있습니다 .$ type set set is a shell builtin $ help set (...) Using + rather than - causes these flags to be turned off.
동일한 내용이 여기에 문서화되어 있습니다.https://www.gnu.org/software/bash/manual/bashref.html#The-Set-Builtin.
답변2
오류에 대한 보석금을 해제하는 대안은 무슨 일이 있어도 성공을 강요하는 것입니다. 다음과 같이 할 수 있습니다:
cmd_to_run || true
그러면 0(true)이 반환되므로 set -e가 트리거되어서는 안 됩니다.
답변3
반환/오류 코드(함수 또는 포크)를 포착하려는 경우 다음과 같이 작동합니다.
function xyz {
return 2
}
xyz && RC=$? || RC=$?
답변4
매우 간단하다고 생각되는 또 다른 접근 방식은 다음과 같습니다. (및 set
이외의 다른 옵션 에도 적용됩니다 -e
):
설정을 복원하려면 을 사용하십시오 $-
.
예를 들어:
oldopt=$-
set +e
# now '-e' is definitely disabled.
# do some stuff...
# Restore things back to how they were
set -$oldopt
구체적 으로는 -e
다른 사람들이 언급한 옵션( || true
또는 " if
" 안에 넣기)이 더 관용적일 수 있습니다.