zsh:如何存储语句的返回码而不触发`set -e`?

zsh:如何存储语句的返回码而不触发`set -e`?

假设我想捕获返回码

(exit 56)

如果我使用set -ezerr处理程序,我不能再这样做:

(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并且更喜欢手动进行正确的错误处理)。

相关内容