2009/06/18
SIGPIPE
1#!/bin/sh 2 : 3if ${any_command} | grep -q "${word}" 4then 5 :
linux 上で実行しているこの様なシェルスクリプトの ${any_commnand} がたまに異常終了している事がある。
気になって調べてみると SIGPIPE を受信してエラー終了している様だ。
grep (1) のマニュアルを調べてみると
Exit immediately with zero status if any match is found, even if an error was detected.
man grep
と明記してあるので grep (1) が先に終了してしまったので、 ${any_command} に SIGPIPE が送信されているらしい。
スクリプト中で grep -q は割と多用すると思うが、
こんな落とし穴もあるので気をつけなくては。
そもそも grep (1) なんてよく使うコマンドだから
かえってマニュアルを熟読しないだろうし、
だからこの様な BUG が潜む原因にもなっていると思う。
というか実は常識的な話だったりする?