Bash

即使命令錯誤,為什麼退出程式碼為 0?

  • May 6, 2020

我在 bash 腳本中測試不同的東西,我遇到了一個我無法解釋的問題。

我故意編寫了一個錯誤的命令,以獲取與 0 不同的退出程式碼,但不知何故,我似乎仍然得到 0。

我正在執行的程式碼是:

USER_NAME=$(id -uns)

if [[ ${?} -ne 0 ]]
then
   echo "Your command failed to execute with exit code ${?}"
   exit 1
fi
echo "Your username is ${USER_NAME}"

我的程式碼的輸出是:

id:未知選項–s

嘗試“id –help”以獲取更多資訊。

您的命令無法執行,退出程式碼為 0

您的使用者名是

我猜在某種程度上,它顯示了 echo 命令的退出程式碼?即便如此,如果退出碼為0,為什麼還要進入if語句呢?

如果是這樣,那麼我怎樣才能讓它顯示應該顯示的實際退出程式碼?

在您的程式碼中,在if語句中,列印的退出狀態是 test 的退出狀態[[ ${?} -ne 0 ]]。該值$?始終是最近執行的命令的退出狀態,並且測試算作命令,至少在將值設置$?為其結果方面是這樣。

如果要列印 的退出狀態id,請將其分配給其值不會改變的變數,

id -uns
err=$?

if [[ $err -ne 0 ]]; then
   printf 'id failed with code %d\n' "$err" >&2
   exit 1
fi

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