Linuxにおけるコマンドの終了ステータス範囲

とってもいまさらだが、8ビットを超える範囲の終了ステータスは使えない。

  • 符号なしの8ビット範囲 (0-255) に限られる。
  • 8ビットを超える範囲を返しても9ビット目以降は無視される。
  • 符号なし表現なので -1 = 255 になる。

検証

環境

Oracle Enterprise Linux 6.2 (Santiago)

準備 /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

参考

終了ステータス - Wikipedia

コンピュータプログラミングにおけるプロセスの終了ステータス(英: exit status)またはリターンコード(英: return code)とは、子プロセス(または呼び出された側)が具体的な手続きや委任されたタスクを実行完了した際、親プロセス(または呼び出した側)に渡す小さな数である。DOSではこれをエラーレベル (errorlevel) と呼ぶこともある。

Unix
Unix系では、waitシステムコールがセットするステータスは子プロセスの終了時の各種情報をまとめたビットフィールドで構成されている。子プロセスが正常終了した場合(WIFEXITEDマクロで判定する。他にはシグナル受信で終了させられる場合がある)、SUSではステータスの下位8ビットが子プロセスが設定した終了ステータスを示すことになっている[4]。その値は wait.h に定義されたマクロ WEXITSTATUS で取得することができる。このため、Unix系の終了ステータスの値は0から255まで(8ビット符号なし整数)に限られている(それ以上の値を指定しても親プロセス側が下位8ビットしか受け取れない)。