exit code 1 vs exit code 2: その違いの意味
exit 1は「何かが失敗した」、それだけだ。exit 2は慣例的に「使い方を間違えた」 - 不正な引数や構文 - を意味するが、多くのツールがこの規則を曲げる。
1も2もどちらも通常の非ゼロの失敗だが、異なる根本原因を示唆する。緩い慣例を知ることで、デバッグをより速く正しい方向へ向けられる。
exit code 1: 一般的な失敗
慣例上、1は「操作が失敗した」の万能コードだ。失敗したテスト、buildエラー、assertion、マッチしない非空のgrep - もっと具体的なコードがないとき、何かがうまくいかなかった場合、ほぼすべてのツールが1に手を伸ばす。
exit code 2: 誤用 / 使用法エラー
多くのプログラムとshell自体が、2を「不正に呼び出した」 - 未知のフラグ、必須引数の欠落、構文エラー - に使う。Bashはshell構文エラーに2を返す; grepのようなツールは、「マッチなし」の1に対し、*エラー*(不正なファイル、不正なregex)に特に2を使う。
規則が緩い理由
0より上に強制された標準はない。多くのツール(make、pytest、linter)が1と2に独自の意味を定義するため、慣例は保証ではなくヒントだ。常に特定のツールが文書化しているexit codeと照合する。
CIでの対処法
- exit 1 → ログを読む; 使用法の問題ではなく、実際の失敗だ。
- exit 2 → コマンド内の不正なフラグ、欠落した引数、構文エラーを疑う。
- 不明なら、そのツールのドキュメントを確認する - 1と2は慣例の上でツールが定義する。
重要なポイント
- exit 1は、ほぼすべてが使う一般的な「失敗した」コードだ。
- exit 2は慣例的に誤用を意味する: 不正な引数や構文エラー。
- 慣例は緩い - 多くのツールが1と2を自分用に再定義する。
- CIでは、exit 2は出力だけでなくコマンドを読み返させるべきだ。
関連ガイド
Exit Codes and Signals in CI/CD: A Practical GuideA practical guide to process exit codes and signals in CI/CD - what 1, 2, 124, 126, 127, 130, 137, and 143 me…
Exit Code 127 Explained: Command Not Found in CIExit code 127 means the shell could not find the command you tried to run - usually a missing tool or a PATH…
Exit Code 143 Explained: SIGTERM and Graceful ShutdownExit code 143 means a process was terminated by SIGTERM (128 + 15). In CI it usually means cancellation, a ti…