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 が潜む原因にもなっていると思う。
というか実は常識的な話だったりする?


Copyright © 2008-2020 Mitzyuki IMAIZUMI. All rights reserved.