破棄されたブログ

このブログは破棄されました。

POSIX における終了コードについてとか

POSIX の exit のページを見ていたら、こんなのがあった。

If n is specified, but its value is not between 0 and 255 inclusively, the exit status is undefined.

http://pubs.opengroup.org/onlinepubs/009695399/utilities/exit.html

「終了コード 0 から 255 の間じゃないと終了コードが定義されないよ」みたいなことだと思う。知らんかったのでちょっと試してみた。CYGWIN なんで本物の UNIX とか Linux とかではどうかわからん。

$ uname
CYGWIN_NT-6.1
$ cat exit.sh
#!/bin/sh
exit $1
$ sh exit.sh 0; echo $?
0
$ sh exit.sh 255; echo $?
255
$ sh exit.sh 256; echo $?
0
$ sh exit.sh 257; echo $?
1
$ sh exit.sh -1; echo $?
255
$ sh exit.sh -2; echo $?
254

n > 255 → n % 256, n < 0 → 256 - n % 256 が、返ってきてる感じ。

ところで、exit の man ページによると、終了コードの標準もあるっぽい。
ぼくはこれも POSIX でやってるものだと思ってた。
というかそれを調べるために POSIX 標準眺めてたんだけど、実際の標準化作業は BSD がやってる(やってた?)みたい。

BSD は終了コードを標準化しようとしている; を参照すること。

http://linuxjm.sourceforge.jp/html/LDP_man-pages/man3/exit.3.html

BSD の終了コードについての man ページはこれ。環境変数でなくて、ヘッダーファイルなんで、C 系言語がわからんぼくとしてはどうもこうもないなあ。シェルスクリプトの終了コードに使いたいんだけど。。。
http://kaworu.jpn.org/doc/FreeBSD/jman/man3/sysexits.3.php

広告を非表示にする