set -e가 켜져 있을 때 쉘이 종료되지 않도록 하시겠습니까?

set -e가 켜져 있을 때 쉘이 종료되지 않도록 하시겠습니까?

set -e스크립트를 열었습니다 . 유일한 것은 여기에 실패 시 스크립트가 종료되도록 하고 싶지 않지만 다른 모든 명령도 동일하게 수행하기를 원하는 명령이 하나 있다는 것입니다. set -e오류 코드가 발생했을 때 스크립트를 종료하지 않고 계속 실행하려면 어떻게 해야 합니까?

문제의 스크립트:

native=$(pacman -Qenq -)

stdin에 기본 패키지 이름이 아닌 경우 stdin에 오류 코드가 기록됩니다.

답변1

set -eaka는 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실패 시 / 에 $?대한 호출).:truecmd

cmd && true
ret=$?

또한 취소 set -e하지만 종료 상태를 유지합니다 cmd.

답변2

> var=
> : ${var:=foo}
> echo "$var"
foo

관련 정보