set -e
스크립트를 열었습니다 . 유일한 것은 여기에 실패 시 스크립트가 종료되도록 하고 싶지 않지만 다른 모든 명령도 동일하게 수행하기를 원하는 명령이 하나 있다는 것입니다. set -e
오류 코드가 발생했을 때 스크립트를 종료하지 않고 계속 실행하려면 어떻게 해야 합니까?
문제의 스크립트:
native=$(pacman -Qenq -)
stdin에 기본 패키지 이름이 아닌 경우 stdin에 오류 코드가 기록됩니다.
답변1
set -e
aka는 set -o errexit
조건의 일부인 명령에는 작동하지 않습니다. 예를 들면 다음과 같습니다.
if cmd; do
until cmd; do
while cmd; do
cmd || whatever
cmd && whatever
ERR
이는 이를 지지하는 쉘 트랩 에도 적용됩니다 .
따라서 명령 실패를 무시하는 관용적 방법은 다음과 같습니다.
cmd || : errors ignored
그렇지 않으면:
cmd || true
cmd || :
그러면 호출이 취소 set -e
되고 0으로 설정됩니다( cmd
실패 시 / 에 $?
대한 호출).:
true
cmd
cmd && true
ret=$?
또한 취소 set -e
하지만 종료 상태를 유지합니다 cmd
.
답변2
> var=
> : ${var:=foo}
> echo "$var"
foo