終了コード128、理由は何ですか?


3

定義によると、終了コード128は「無効な終了引数」を意味します。しかし、引数が浮動小数点数のように無効な場合、常に255(終了ステータスが範囲外)になります。

これは私のLinuxディストリビューションの独自の実装ですか?

# exit 1.234
exit
bash: exit: 1.234: numeric argument required

$ echo $?
255   //this should be 128?

# exit -1
exit

$ echo $?
255   //this is okay

回答:


5

必要な無効な終了コードであると言うBashのドキュメントには何もありません128

Bash自体は、構文エラーが発生しない限り、最後に実行されたコマンドの終了ステータスを返します。その場合、ゼロ以外の値で終了します。

最後のコマンドは組み込みのbashですexit(manページから)

終了[n]

シェルをステータスnで終了させます。nを省略すると、終了ステータスは最後に実行されたコマンドの終了ステータスになります。

チェック仕様を WEXITSTATUSため。

WEXITSTATUS(stat_val)

WIFEXITED(stat_val)の値がゼロ以外の場合、このマクロは、子プロセスが_exit()またはexit()に渡したステータス引数の下位8ビット、または子プロセスがmainから返した値を評価します。 ()。

そう出口は、8ビットの整数(0から255)に制限され、そう-1であろう255。Exitは整数の引数のみを理解し、フロートは理解しないため、デフォルトを開始する可能性があります-1

bash$ echo $BASH_VERSION
4.1.10(4)-release

bash$ exit foo
exit
bash: exit: foo: numeric argument required
$ echo $?    
255

bash$ exit 2
exit
$ echo $?
2

bash$ exit -2
exit
$ echo $?
254

1

これはシェルバリアントに固有です。このhttp://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08 またはhttp://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#exitでは、 128は特別な終了コードです。

以下のためのexit 3.451を返しtcshのkshのとzshのリターン3、(出口実際にはしません)の私のバージョン、および灰は2を返します(が、また出実際にはしません)。


1
いくつかの終了コードを除き、終了コードは標準化されていません。また、0は成功、> 0は何らかの失敗を意味します。
fpmurphy
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.