명령문이 실패하면 스크립트를 종료합니다.

명령문이 실패하면 스크립트를 종료합니다.

if쉘 스크립트에서 중첩된 문을 사용하고 있습니다. 문이 실패하면 스크립트의 다른 부분을 실행하지 않고 스크립트에서 나와야 합니다. 나는 exit 1및 를 사용해 보았습니다 set -e.

0이 아닌 상태를 반환하는 set -e일부 명령문을 사용했기 때문에 그렇게 할 수 없습니다 .grep

명령문이 실패할 경우 스크립트 실행을 중지하는 방법을 알려줄 수 있는 사람이 있습니까?

답변1

set -e특정 진술이 있으면 계속 사용할 수 있습니다 .예상되는실패하면 오류 상태를 파악하고 "처리"하면 됩니다.

$ cat 454756.sh
#!/bin/bash
set -e
[[ 1 -eq 2 ]] || :
echo "Still got here!"
$ ./454756.sh
Still got here!

set -e스크립트를 중단합니다잡히지 않은오류 상태. 그렇지 않으면 해당 명령문을 사용할 수 없습니다 if.

# this also still works
set -e
if /bin/false; then
    echo "nope"
else
    echo "yep"
fi

주문은 || :명령에서 발생하는 오류를 "먹는" 깔끔한 방법으로, set -e특정 명령을 사용하고 실패할 때 유용합니다.완전히 괜찮아.

또 다른 방법은 -e관련 명령 전에 설정을 해제한 다음 재설정하는 것입니다.

set -e
do_stuff
set +e
/bin/false
set -e

관련 정보