子プロセスの終了ステータスを取得するには ($?
)
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