揮発性のメモ2

http://d.hatena.ne.jp/iww/

戻り値を取得して戻り値にする

#!/usr/bin/perl

exit system( "/bin/ping -w1 -c1 hoge" );
$ ./hoge
$ echo $?
0

なんでもいいからエラー取得しようと思ったけどこれで戻り値が取得できなかった。


system()の戻り値の上位8ビットに system()内で起動したプログラムの戻り値が入っている。
exit()でシェルに返される戻り値は 呼び出し側では下位8ビットしか取得できない。
なので、8ビット右シフトしてから返す。

#!/usr/bin/perl

exit system( "/bin/ping -w1 -c1 hoge" )>>8;
$ ./hoge
$ echo $?
2