zsh: `set -e`를 트리거하지 않고 명령문의 반환 코드를 저장하는 방법은 무엇입니까?

zsh: `set -e`를 트리거하지 않고 명령문의 반환 코드를 저장하는 방법은 무엇입니까?

반환 코드를 캡처하고 싶다고 가정해 보겠습니다.

(exit 56)

set -eor 핸들러를 사용하면 zerr더 이상 이 작업을 수행할 수 없습니다.

(exit 56)
ret=$?

(exit 56) || true회피를 사용하면 set -e반환 코드가 0이 되어 더 이상 얻을 수 없습니다.

그렇다면 반환 코드를 얻는 방법은 무엇입니까?

답변1

당신은 그것을 사용할 수 있습니다 && true:

set -o errexit
(exit 50) && true
echo code: $?

다음과 같이 할 수도 있습니다.

set -o errexit
if (exit 50) then else
  echo failed with code $?
fi

또는:

set -o errexit
(exit 50) || {
  code=$?
  echo failed with code $code
  # and whatever else you want to do with $code
}

아이디어는 errexit실패한 명령이 다음과 같이 사용될 때마다상황하지만 이렇게 하면 (exit 50) && true이후의 종료 코드는 항상 0이 됩니다.

(개인적으로 나는 errexit적절한 오류 처리를 수동으로 수행하는 것을 피하고 선호합니다.)

관련 정보