Linux

什麼是 Linux 退出狀態和所有狀態列表

  • March 6, 2019

我正在嘗試學習 Linux bash 腳本,並閱讀了http://tldp.org站點中的文章。我看到了某種日誌清除腳本,我注意到某些東西被用作退出狀態。我在下面給出了文章中的一些腳本片段。

#!/bin/bash
# Cleanup, version 3

#  Warning:
#  -------
#  This script uses quite a number of features that will be explained
#+ later on.
#  By the time you've finished the first half of the book,
#+ there should be nothing mysterious about it.

LOG_DIR=/var/log
ROOT_UID=0     # Only users with $UID 0 have root privileges.
LINES=50       # Default number of lines saved.
E_XCD=86       # Can't change directory?
E_NOTROOT=87   # Non-root exit error.

如果兩個變數都使用程序的保留退出狀態程式碼,E_NOTROOT(86) 和 E_XCD(87) 會怎樣?

或者

如果兩個變數都只是為此目的使用隨機數。

參考:http ://tldp.org/LDP/abs/html/abs-guide.html

每個執行都有一個退出狀態。通常,零表示正常,非零表示錯誤。該值不會自然地顯示在標準輸出中。echo $?您可以在每個執行的命令後看到該值鍵入。

例如,如果您鍵入:

mkdir test;echo $?如果您有正確的權限,您將創建目錄,然後您將看到一個零。

但是如果你寫 mkdir testing/test;echo $?了正確的燙髮但沒有“測試”子目錄,你會看到錯誤消息,然後是“1”。

這是 GNU/Linux 中非常重要的工具,因為命令可以相互連接。並且(僅作為範例)如果您使用雙與號連接命令,則僅當第一個命令在出口處具有零值時才執行第二個命令。有很多方法可以連接命令。要了解更多資訊,只需鍵入man bash

一般來說,任何程序的退出狀態都由 POSIX 定義為一個 8 位(無符號)整數值,因此可能的值介於 0 和 255 之間。

WEXITSTATUS(stat_val)

$$ This $$宏計運算元程序傳遞給_exit()or的狀態參數的低 8 位exit(),或子程序從 中返回的值main()等待(3p) C 標準指定了兩個常量EXIT_SUCCESSEXIT_FAILURE,它們可以分別傳遞給 exit() 以指示成功或不成功的終止。退出(3)

按照慣例,EXIT_SUCCESS等於零,所有非零值都被視為錯誤的標誌。

但是,包括 Bash 在內的類似 POSIX 的 shell 保留了一系列高退出狀態供內部使用,以表示被呼叫命令中出現問題,而該命令沒有機會返回顯式退出狀態(Bash 手冊):

出於 shell 的目的,以零退出狀態退出的命令已成功。退出狀態為零表示成功。非零退出狀態表示失敗。當命令在致命信號 N 上終止時,bash 使用 128+N 的值作為退出狀態。如果找不到命令,則為執行它而創建的子程序返回狀態 127。如果找到命令但不可執行,則返回狀態為 126。

在實踐中,因此可以使用 1 到 125 之間的任何值來以特定於程序的方式指示錯誤。正如@mosvy 在評論中暗示的那樣,BSD努力標準化一些有意義的退出程式碼,但它從未變得普遍。這些統一的退出程式碼從 64 開始,低於該值的任何內容都留給程序特定使用。最高的“標準化”值為 78,因此很明顯,您的範例中提到的值純粹是任意程序特定的程式碼。

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