2023年1月6日金曜日

UNIXコマンド 任意のリターンコード(終了コード)を返すコマンド: rrc

シェルスクリプトなどで、子プロセスのリターンコード(終了コード, return code, exit code)によって処理を振り分けている場合、子プロセスに意図したリターンコードを返してもらいたい時がある。

その時は、「rrc」(return return code)コマンドが便利



簡単に使い方を書いておく。
例1:
$ rrc
引数なしで実行した場合はリターンコードは 0。リターンコードは「$?」変数で確認可能。
$ echo $?
0

例2:
$ rrc 1
$ echo $?
1
引数に返して欲しいリターンコードの数字を指定すれば、それを返してくれる。
注意点としては、rrcの内部的には「atoi()」関数を使用しているので、数字以外の文字を指定した場合や、最大値/最小値を超える数値を指定した場合は、atoi()の仕様に準拠することになる。

例3:
$ rrc -1
$ echo $?
-1

$ rrc 1024
$ echo $?
1024
rrcコマンド自体は、-1とか1024とかもリターンコードとして返してくれるが、UNIX的にはexit codeは0〜255となっている。

正確には親プロセスで exit(3) Library Function (及びそれに含まれるマクロなど)を使用して子プロセスを待機する場合は、exit codeは0〜255となる。
具体的には、WEXITSTATUSマクロでリターンコードを取得すると0〜255となる。
wait.h

...
#define WEXITSTATUS(x)  ((_W_INT(x) >> 8) & 0x000000ff)
...
0x000000ff つまり 255 でマスクされていることが分かる。

rrcコマンドとしては、-1や1024なども返すことは可能だが、実際それがどういったシチュエーションで使用されるかも考慮が必要なので、注意が必要である。

rrcコマンドとしては、そういった0〜255以外の想定外のリターンコードも返すことができるという自由度を持たせているということである。

ちなみに、シェルスクリプトでも任意のリターンコードを返すのも簡単に書けるが、こちらは勝手に0〜255にマスクされる点が異なる。
$ bash -c "exit -1"
$ echo $?
255

$ bash -c "exit 1024"
$ echo $?
0

ということで、子プロセスのリターンコードをテストしたい時にはrrcコマンドは何かと重宝するだろう。

0 件のコメント:

コメントを投稿