zsh:`set -e`をトリガーせずにステートメントの戻りコードを保存する方法は?

zsh:`set -e`をトリガーせずにステートメントの戻りコードを保存する方法は?

戻りコードをキャプチャしたいとしましょう。

(exit 56)

set -eorハンドラを使用すると、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後の終了コードは常にゼロになります。

(個人的には、errexit適切なエラー処理を手動で実行するのを避け、好みます。)

関連情報