Bash
即使命令錯誤,為什麼退出程式碼為 0?
我在 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