終了コードとは
すべてのスクリプト、コマンド、またはバイナリは、リターン コードで終了します。この値は、特殊変数 $? で確認できます。 .戻りコードは数値であり、符号なし 8 ビット整数が使用されるため、0 から 255 までに制限されます。 -1 の値を使用すると、255 が返されます。各実行は、成功したかどうかにかかわらず、エラー メッセージを表示するか、サイレントに終了コードで終了します。例:
$ date ; echo $? Sat Jan 18 08:06:07 IST 2020 0
ご覧のとおり、コマンドは問題なく実行されたため、終了コードは 0 です。では、これを試してみましょう:
$ wrngcmd ; echo $? -bash: wrngcmd: command not found 127
意味のない一連の文字を入力したため、コマンドが見つかりませんでした。
予約済みの Bash 終了コード
コマンドの成功を示す終了コード「0」と同様に、bash にはさまざまな状況に対応する予約済みの終了コードがいくつかあります。したがって、理想的には、スクリプトで exit コマンドを使用していて、終了コードを指定する必要がある場合は、競合する結果が生じる可能性があるため、これらの予約済みの終了コードを使用しないでください。
終了コード番号 | 意味 | 例 | コメント |
---|---|---|---|
1 | 一般的なエラーのキャッチオール | 「var1 =1/0」とする | 「ゼロ除算」やその他の許可されない操作などのその他のエラー |
2 | シェル組み込みの誤用 | empty_function() {} | キーワードまたはコマンドがありません |
126 | 呼び出されたコマンドは実行できません | /dev/null | パーミッションに問題があるか、コマンドが実行可能ファイルではありません |
127 | 「コマンドが見つかりません」 | illegal_command | $PATH またはタイプミスに問題がある可能性があります |
128 | 終了する引数が無効です | 出口 3.14159 | exit は 0 ~ 255 の範囲の整数引数のみを取ります (最初の脚注を参照) |
128+n | 致命的なエラー信号「n」 | kill -9 $PPID of script | $? 137 (128 + 9) を返します |
130 | Control-C で終了するスクリプト | Ctrl-C | Control-C は致命的なエラー信号 2 (130 =128 + 2、上記参照) です |
255* | 終了ステータスが範囲外 | 出口 -1 | exit は 0 ~ 255 の範囲の整数引数のみを取ります |
例で終了コード「128 +n」を理解しましょう。以下に示すように、終わりのないループを実行します。
#!/bin/bash while true; do echo ${$} done
このスクリプトを実行すると、強制終了するか「CTRL + C」を実行するまで、同じ PID が無期限に出力されます。 「CTRL+C」を実行して、終了コードを確認してみましょう。
# sh test.sh .... 2582 2582 2582 2582 2582 2582 ^C geeklab$ echo $? 130
ご覧のとおり、終了コードは「128+2」、つまり 130 です。同様に、「kill -9」を使用してスクリプトを強制終了すると、終了コードは「128+9」、つまり 137 になります。その例も見てみましょう:
# sh test.sh .... 2582 2582 2582 ...
# kill -9 [pid_of_script]
.... 2602 2602 Killed: 9 geeklab$ echo $? 137