私は最近、Advanced Bash-ScriptingGuideからこの特別な意味を持つ終了コードのリストに出くわしました。彼らはこれらのコードを予約済みと呼び、次のことを推奨しています。
上記の表によると、終了コード1-2、126-165、および255には特別な意味があるため、ユーザー指定の終了パラメーターでは使用しないでください。
少し前に、次の終了ステータスコードを使用するスクリプトを作成しました。
スクリプトを作成したとき、特別な終了コードを認識していなかったため、最初のエラー状態で1から開始し、連続するエラータイプごとに終了ステータスをインクリメントしました。
後の段階で他のスクリプト(ゼロ以外の終了コードをチェックできる)から呼び出すことができるように、スクリプトを作成しました。私は実際にはまだそれをしていません。これまでのところ、スクリプトはインタラクティブシェル(Bash)からのみ実行しており、カスタム終了コードを使用することで問題が発生する可能性があるかどうか疑問に思っていました。Advanced Bash-Scripting Guideからの推奨事項はどの程度関連性があり重要ですか?
Bashのドキュメントに裏付けとなるアドバイスは見つかりませんでした。終了ステータスのセクションには、Bashが使用する終了コードがリストされているだけですが、これらのいずれかが予約されているとは記載されておらず、独自のスクリプト/プログラムに使用しないように警告されています。
プロセス終了コードの意味を標準化するためのいくつかの試みがありました。あなたが言及したものに加えて、私は知っています:
BSDにはsysexits.h
、64以降の値の意味を定義するものがあります。
grep
終了コード0のGNUドキュメントは、少なくとも1つの一致が見つかったことを意味し、1は一致が見つからなかったことを意味し、2はI / Oエラーが発生したことを意味します。この規則は、「何も問題はなかったが何も見つからなかった」と「I / Oエラーが発生した」の区別が意味のある他のプログラムにも明らかに役立ちます。
Cライブラリ関数の多くの実装では、system
終了コード127を使用して、プログラムが存在しないか、起動に失敗したことを示します。
Windowsでは、NTSTATUS
コード(32ビットの数値空間全体に不便に散在している)が終了コードとして使用される場合があります。特に、壊滅的な誤動作によりプロセスが終了したことを示すコードSTATUS_STACK_OVERFLOW
です(例)。
これらの規則の特定の1つに従う特定のプログラムを当てにすることはできません。唯一の信頼できるルールは、終了コード0は成功であり、それ以外はある種の失敗であるということです。(C89の値がゼロであるとEXIT_SUCCESS
は限らないことに注意してください。ただし、値が同じでなくexit(0)
てexit(EXIT_SUCCESS)
も、同じように動作する必要があります。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加