假设我想捕获返回码
(exit 56)
如果我使用set -e
或zerr
处理程序,我不能再这样做:
(exit 56)
ret=$?
如果我使用(exit 56) || true
避免set -e
,返回码将变为零,我将无法再获取它。
那么如何获取返回码呢?
答案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
并且更喜欢手动进行正确的错误处理)。