반환 코드를 캡처하고 싶다고 가정해 보겠습니다.
(exit 56)
set -e
or 핸들러를 사용하면 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
적절한 오류 처리를 수동으로 수행하는 것을 피하고 선호합니다.)