Linux の終了コードは、開発者がコードの品質を向上させ、一般的なエラーを回避するのに役立つ強力なツールです。ターミナルでコマンドが実行されると、これらのコードは操作が成功したか失敗したかを示す特定の値を返すため、プログラマーは問題を迅速に検出し、効率的に対処できます。
これらのコードを理解することで、デバッグ時間を短縮し、ソフトウェアの信頼性を高めることができます。初心者でもプロでも、終了コードを習得すると、プログラミングフローをより細かく制御できるようになり、開発するアプリケーションのパフォーマンスが向上します。
まとめ
- Linux のすべてのコマンドは終了コードを返します。0 は成功を示し、XNUMX 以外の値は失敗を示します。
- 変数 $? を使用できますか?スクリプト内の終了コードにアクセスし、プログラムのフローを制御します。
- diff や curl など、コマンドごとに異なる非標準的な終了コードに注意してください。
Linux のすべてのコマンドは、失敗した場合にエラー メッセージが表示されますが、この情報に頼ることは困難です。スクリプトは、できるだけ堅牢にするために終了コードを使用する必要があります。
終了コードとは何ですか?
Linux コマンドを実行すると失敗する場合があります。エラーはさまざまな理由で発生する可能性がありますが、通常はその理由を説明するメッセージが表示されます。
表示されるエラー メッセージは、STDOUT とは異なるパスである STDERR に表示されるため、予想される出力からエラーを分離できます。ユーザーにとってはエラーの説明が役立つはずですが、スクリプトやその他の自動化されたプロセスでは、より確実にエラーを認識できる必要があります。
明らかなエラー メッセージに加えて、各コマンドは終了コードを返します。これは 0 から 255 までの数字で、コマンドが失敗したか成功したかを示します。デフォルトでは終了アイコンは非表示になっていますが、コマンド ライン インターフェイスでは特殊変数 $? でこの値にアクセスできます。
値 0 は成功を示し、値 XNUMX 以外の値は失敗を示すことに注意してください。この値はコマンドラインから確認したり、スクリプトで調べたり、プログラムのフローを制御するために使用したりできます。
終了コードはどのように使用すればいいですか?
上記の例では、ls コマンドは成功した場合は終了コード 0 を返し、引数が無効な場合は終了コード 1 を返しました。これは直感に反するように思われ、0 を偽、1 を真として扱う従来のプログラミング言語と矛盾しています。ただし、この設定では、単一のグローバル成功値と、さまざまな種類のエラーを表すための幅広い値が許可されます。
変数 $? を繰り返すことに加えて、終了ステータスを手動で確認するには、条件付き if ステートメントを使用できます。コマンドが終了ステータス 0 を返す場合、関連付けられた then ブロック ステートメントが実行されます。それ以外の場合、見つかった場合は else ブロックが実行されます。例えば:
if command; then echo "command succeeded"; else echo "command failed"; fi
この構造をシェル スクリプトで使用すると、読みやすくフォーマットするのが少し簡単になります。
if command
then echo "command succeeded"
else echo "command failed"
fi
これは次と同等です:
command
if [ $? -eq 0 ]
then echo "command succeeded"
else echo "command failed"
fi
長いバージョンでは、角括弧構文を使用して $? の値をテストしますが、通常は最初のケースのように値を直接テストする方が簡単です。その$を覚えていますか?これは常に最後のコマンドからの終了シンボルを表すので注意してください。 $の価値があなたを誘惑するかもしれませんか?たとえば、修正する。
command
echo "command returned exit code:" $?
if [ $? -eq 0 ]
then echo "command succeeded"
else echo "command failed"
fi
しかし、条件がチェックされると、 $? の値はecho 終了ステータスと等しくなり、ほぼ確実に 0 になります。これを回避するには、条件内で直接テストするか、$? の値を保存します。変数内。
終了ステータスについて他に知っておくべきことはありますか?
終了コードは非常にシンプルで、Unix の原則に従っており、それがその強みの一部です。ただし、知っておくべきエラーや例外がいくつかあります。
シェルの終了コード
入力したコマンドが正しく動作しない場合でも、シェルは終了コードを使用します。たとえば、zsh と bash はどちらも、コマンドが見つからない場合は 127 を使用し、コマンドが実行できない場合は 126 を使用します。
非標準的な終了コード
一部のコマンドは終了ステータスのルールを少し破ります。それらは単なる慣習に過ぎません。たとえば、diff コマンドでは、値 0 は「違いなし」を示し、値 1 は「違いあり」を示し、値 2 はエラーを示します。
これにより、条件文の意味についての混乱が生じる可能性があります。例えば:
if diff file1 file2; then
echo these files are the same!
fi
curl コマンドは少し直感的ではありません。 curl は、URL が見つからない場合の 404 などの HTTP エラーを、ゼロ以外のステータス コードとして報告すると予想されるかもしれませんが、実際にはそうではありません。
-f (–fail) オプションを使用すると、curl の動作が変わり、失敗した場合に終了コード 22 が返されます。
ただし、認証を必要とするエラーなど一部の HTTP エラーでは終了コード 0 が返されるため、これは完全に安全ではないことに注意してください。
コマンドチェーンで終了ステータスを使用する
考えなくても、最適な終了ステータス ショートカットの 1 つに簡単にアクセスできます。簡単な例を以下に示します。
ls program && ./program && echo success || echo epic fail
論理演算子 && と ||他のコマンドの終了ステータスに基づいて複数のコマンドを実行できます。これらは、終了コードの規則に準拠している点を除けば、ほとんどのプログラミング言語の対応する演算子に似ています。 && 演算子は、左側のコマンドの終了ステータスがゼロの場合にのみ、右側のコマンドを実行します。その||演算子は、左側のコマンドがゼロ以外の条件で失敗した場合にのみ、右側のコマンドを実行します。
次のレシピを使用してプログラムを最初から作成する場合、非常に一般的な状況が発生します。
./configure && make && make install
このコマンドの 3 つの部分は次のことを行います。
- ./configure は、環境をチェックし、Makefile を作成するローカル スクリプトを実行します。
- make は Make プログラムを実行し、Makefile を使用してプログラムをビルドします。
- make install は、生成された実行ファイルを /usr/local/bin などの既知のパスにコピーします。
このプロセスのいずれかの部分が失敗した場合、残りの部分を実行しようとせずに直ちに停止します。
真実と偽り
Linux には true と false という 0 つの奇妙なコマンドがあります。どちらも、適切な終了コード (それぞれ 1 と XNUMX) を返す以外は何も行いません。
これらのコマンドはあまり役に立たないと思われるかもしれませんが、テストや一部のシェル スクリプト タスクには役立ちます。 while ステートメントで true を使用すると、無限ループを作成できます。
while true
do
echo あなたが^cするまで走る
スリープ10
行われ
論理演算子と組み合わせて使用して、コマンドの動作を変更することもできます。たとえば、長いコマンド シーケンスを一時停止することができます。
false && (none || of-these && commands || will-run)
または、コマンドの 1 つが失敗した場合でも、コマンド チェーンの実行を強制的に継続することもできます。
cat file-that-may-not-exist | true && echo done
スクリプトから終了コードを返す
ターミナルを終了するために exit コマンドを使用した可能性があります。技術的には、このコマンドはコマンド ウィンドウを終了するため、スクリプトを停止するためにも使用できます。デフォルトでは、スクリプトは最後のコマンドと同じコードを出力します。
ただし、exit コマンドに数値パラメータを渡すことで終了コードを変更できます。
exit number
スクリプトは入力したステータス コードを出力するので、これを使用してプログラムからのさまざまなエラー状態を他のユーザーに通知できます。
終了コマンドを知っていれば、簡単に使用できるようになります。意識せずに使用することもできますが、スクリプトを使用する場合は、終了コードを正しく使用するようにしてください。
Linux の終了コードは、堅牢で効率的なソフトウェアを開発する上で不可欠な要素です。これを十分に理解することで、アプリケーションのパフォーマンスを向上させ、ソフトウェア エラーを大幅に削減できます。今後のプロジェクトでこれらのコードをテストし、実行の品質と速度の違いを確認してください。
終了コードに関する課題に直面したことがありますか?コメント欄であなたの体験を共有してください!














