什麼是 Linux 退出狀態和所有狀態列表
我正在嘗試學習 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) 會怎樣?
或者
如果兩個變數都只是為此目的使用隨機數。
每個執行都有一個退出狀態。通常,零表示正常,非零表示錯誤。該值不會自然地顯示在標準輸出中。
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_SUCCESS
和EXIT_FAILURE
,它們可以分別傳遞給 exit() 以指示成功或不成功的終止。退出(3)按照慣例,
EXIT_SUCCESS
等於零,所有非零值都被視為錯誤的標誌。但是,包括 Bash 在內的類似 POSIX 的 shell 保留了一系列高退出狀態供內部使用,以表示被呼叫命令中出現問題,而該命令沒有機會返回顯式退出狀態(Bash 手冊):
出於 shell 的目的,以零退出狀態退出的命令已成功。退出狀態為零表示成功。非零退出狀態表示失敗。當命令在致命信號 N 上終止時,bash 使用 128+N 的值作為退出狀態。如果找不到命令,則為執行它而創建的子程序返回狀態 127。如果找到命令但不可執行,則返回狀態為 126。
在實踐中,因此可以使用 1 到 125 之間的任何值來以特定於程序的方式指示錯誤。正如@mosvy 在評論中暗示的那樣,BSD努力標準化一些有意義的退出程式碼,但它從未變得普遍。這些統一的退出程式碼從 64 開始,低於該值的任何內容都留給程序特定使用。最高的“標準化”值為 78,因此很明顯,您的範例中提到的值純粹是任意程序特定的程式碼。