Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

exitで渡すのは終了ステータスであってシグナル番号ではない

ちゃんと勉強した人なら当然なのでしょうが、私はちゃんと分かっていなかったのでメモ。

shuzo-kino.hateblo.jp
の補足的内容。


exitでは数字を渡して終了できるのですが……なんとなくシグナル番号を渡すもんだと勘違いしており

$ cat testExit.bash
#! /bin/bash

COUNT=0

function catchHup () {
  printf HUP
}

trap "printf '\n\r`basename $0` is closing.'" EXIT
trap catchHup HUP

read
exit 1

readのところでpkillで1(HUP)をおくると以下の様にHUPをつかんでくれるけれど

~$ ./testExit.bash
HUP

exit 1 で終了させると、pkillで値を渡した時とは違い、普通に閉じるだけ。

$ ./testExit.bash
 
testExit.bash is closing.

知っていれば当然なのですが、ここで渡している数字は終了ステータスであってシグナル番号じゃありません。
というわけでtrapでつかむ事はできないので、上記の処理は意図通り動かないってわけです。

そもそも終了ステータスであれば0が成功、それ以外は失敗という扱いなので上の例は二重の意味で意図が間違っていたというオチ……ちゃんと勉強しましょうという話ですね、ええ

参考もと

  • man exit