子プロセスの終了ステータスを取得するには ($?)

Ruby

$? で最後に終了した子プロセスの終了ステータスを得られる。

$?Process::Statusクラスのオブジェクトであるので、終了ステータスを整数で取得するには $?.exitstatus とする。

Rubyではif文などの条件の中では 0でも0以外でもすべての整数がtrueの扱いになるので、 if $?.exitstatus==0 などとちゃんと比較式を入れることが必要なので、注意。

$? | Ruby 1.9.3 リファレンスマニュアル
http://docs.ruby-lang.org/ja/1.9.3/method/Kernel/v/=3f.html

Perl

$? を256で割ると、終了した子プロセスの終了ステータスを得られる。 waitwaitpidを呼び出した後で使える。その他の関数を呼び出したあとでも使えるかも。

256で割るのは $? / 256 でなくて $? >> 8 でもよい。

Perl で定義済みの変数 | perldoc.jp
http://perldoc.jp/docs/perl/perlvar.pod

sh (シェルスクリプト)

$? という変数で直前に実行したコマンドの終了ステータスが得られる。

-> 特殊な変数

パイプで複数のコマンドを接続した場合、$? は最後のコマンドの終了コードしか得られない。 bashであれば PIPESTATUS という変数でパイプの中のすべてのコマンドの終了コードを取得することができる。

以下のコードでは終了コードを受け取ってそれを計算して結果を終了コードで返している。

(
    exit 10
) || exit `expr $? + 2`
# => 終了コード 12
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。