子プロセスの終了ステータスを取得するには ($?)
Ruby 2014/03/30
$? で最後に終了した子プロセスの終了ステータスを得られる。
$? は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 2015/01/20
$? を256で割ると、終了した子プロセスの終了ステータスを得られる。
waitやwaitpidを呼び出した後で使える。その他の関数を呼び出したあとでも使えるかも。
256で割るのは $? / 256 でなくて $? >> 8 でもよい。
Perl で定義済みの変数 | perldoc.jp
http://perldoc.jp/docs/perl/perlvar.pod
sh (シェルスクリプト) 2015/01/21
$? という変数で直前に実行したコマンドの終了ステータスが得られる。
-> 特殊な変数
パイプで複数のコマンドを接続した場合、$? は最後のコマンドの終了コードしか得られない。
bashであれば PIPESTATUS という変数でパイプの中のすべてのコマンドの終了コードを取得することができる。
以下のコードでは終了コードを受け取ってそれを計算して結果を終了コードで返している。
(
exit 10
) || exit `expr $? + 2`
# => 終了コード 12