Shell

zsh:如何在不觸發set -e的情況下儲存語句的返回碼?

  • August 10, 2021

假設我想擷取的返回碼

(exit 56)

如果我使用set -ezerr處理程序,我不能再這樣做:

(exit 56)
ret=$?

如果我使用(exit 56) || trueto Avoid set -e,返回碼將變為零,我無法再得到它。

那麼如何獲取返回碼呢?

您可以&& 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並且更喜歡手動進行適當的錯誤處理)。

引用自:https://unix.stackexchange.com/questions/664117