1. 概要

Linuxでは、プロセスが終了すると、終了コードが返されます。 正常に実行されると、このコードはゼロになります。 ゼロ以外の終了コードは、何らかのエラーが発生したことを示します

スクリプトとプログラムで使用する終了コードは自由に選択できますが、特別な意味を持つ標準コードがいくつかあります。 このチュートリアルでは、これらのコードとその意味を見ていきます。

2. 終了コード

シェルスクリプトでは、exitコマンドを使用して終了コードを生成します。 エラーごとに異なる終了コードを使用することで、何が問題だったかを示すことができます。

exit コマンドは、使用する終了コードという1つの引数を取ります。 例えば:

$ bash -c "exit 42"
$ echo $?
42

概要からすでに学習したように、一部の終了コードには特別な意味があります。 ただし、これは使用できないという意味ではありません。 それらは特別であり、予約されていません。

また、一部の特殊コードは、シェルによって意味が異なる場合があります。 この記事の例は、Bashシェルに適用されます。

3. 特別な終了コード

いくつかの特別なコードを見てみましょう。

3.1. 一般的なエラー:1

これは最もよく使用される終了コードであり、その他のエラーのキャッチオール値として使用する必要があります。

3.2. ビルトインシェルの誤用:2

終了コード2は、一部のシェル組み込みコマンドの無効な使用を示します。 組み込みコマンドの例には、 alias echo 、およびprintfが含まれます。

3.3. 実行できません:126

この場合、呼び出されたコマンドは実行できません。 これは、権限に問題がある場合、またはコマンドが実行できない場合に発生する可能性があります。

3.4. コマンドが見つかりません:127

コマンドが見つかりませんでした。 これは、たとえば、PATHにタイプミスや問題があったために発生する可能性があります。

3.5. 終了する引数が無効です:128

exit コマンドは、引数として正の整数のみを取ります。 これは、負の値、小数値、または数値以外の値は許可されないことを意味します。

3.6. 致命的なエラー信号’n ‘:128+ n

Linuxでは、プログラムは33の異なるシグナルの1つを送信する場合があります。 これらの信号のいずれかを受信した後にプログラムが終了すると、128 +signal-number。に等しいエラーコードが返されます。

たとえば、 Control-C と入力してプログラムを終了すると、SIGINT信号が効果的に送信されます。 このシグナルの値は2であるため、プログラムは実行を停止し、値128 + 2=130の終了コードを返します。

3.7. 終了ステータスが範囲外:255

シェルによっては、終了コード255は、返された終了コードが0〜255の範囲外であることを意味する場合があります。

4. 255を超える終了コード

終了コードは1バイトの値で表されるため、可能な最大の終了コードは255です。 ただし、これより大きい終了コードを返すことを妨げるものは何もありません。  255を超える値は範囲外であり、ラップアラウンドされます

これは予期しない結果の原因となる可能性があるため、十分に注意する必要があります。 たとえば、383の終了コードはラップアラウンドされ、127の有効な終了コードになります。これは「コマンドが見つかりません」に変換されます。

$ bash -c "exit 383"
echo $?
127

255を超える終了値を返すことは許可されていますが、常に回避することをお勧めします

5. 結論

この記事では、どの終了コードを予約済みとして処理する必要があるか、およびそれらを作成するスクリプトとプログラムでいつ使用できるかを学習しました。 それらのいくつかは、ユーザーを非常に混乱させるため、絶対に使用しないでください。

シェルが異なれば、特別な終了コードも異なる可能性があることを覚えておく必要があります。 これは注意すべきことです。

また、プログラムやスクリプトを作成するときは、ユーザーへの礼儀として使用する終了コードを文書化する必要があります。