Linuxにおけるコマンドの終了ステータス範囲
とってもいまさらだが、8ビットを超える範囲の終了ステータスは使えない。
- 符号なしの8ビット範囲 (0-255) に限られる。
- 8ビットを超える範囲を返しても9ビット目以降は無視される。
- 符号なし表現なので -1 = 255 になる。
検証
準備 /tmp/return.sh
#!/bin/bash exit $1
実行結果
# /tmp/return.sh 0; echo $? 0 # /tmp/return.sh 1; echo $? 1 # /tmp/return.sh 254; echo $? 254 # /tmp/return.sh 255; echo $? 255 # /tmp/return.sh 256; echo $? 0 # /tmp/return.sh 257; echo $? 1 # /tmp/return.sh 1000; echo $? 232 # /tmp/return.sh 1024; echo $? 0 # /tmp/return.sh -1; echo $? 255 # /tmp/return.sh -2; echo $? 254
参考
コンピュータプログラミングにおけるプロセスの終了ステータス(英: exit status)またはリターンコード(英: return code)とは、子プロセス(または呼び出された側)が具体的な手続きや委任されたタスクを実行完了した際、親プロセス(または呼び出した側)に渡す小さな数である。DOSではこれをエラーレベル (errorlevel) と呼ぶこともある。
Unix系
Unix系では、waitシステムコールがセットするステータスは子プロセスの終了時の各種情報をまとめたビットフィールドで構成されている。子プロセスが正常終了した場合(WIFEXITEDマクロで判定する。他にはシグナル受信で終了させられる場合がある)、SUSではステータスの下位8ビットが子プロセスが設定した終了ステータスを示すことになっている[4]。その値は wait.h に定義されたマクロ WEXITSTATUS で取得することができる。このため、Unix系の終了ステータスの値は0から255まで(8ビット符号なし整数)に限られている(それ以上の値を指定しても親プロセス側が下位8ビットしか受け取れない)。