top  Index  Search  Changes  RSS  Login

GrepBug

2016年現在, 下の「その場しのぎ策」は不要です. もしこの「その場しのぎ策」をやってしまうと, 最近の GNU grep (たとえば 2.24 (2016-03-10))では不具合が生じます. thx > 2ch4:47-50n



!!!以下はobsolete!!!



最近の linux ディストリビューションで「echo a | grep -Fi 'あ'」が 固まることがあるようです(2007年2月). これを回避するその場しのぎ策について. thx > 2ch3:250

その場しのぎ策

;; howm-test061231 でテスト
(defadvice howm-real-grep (around avoid-fgrep-bug
                           (str file-list &optional fixed-p force-case-fold)
                           activate)
  "vine-4.0 や debian sid で「echo a | fgrep -i 'あ'」が固まるバグを回避.
それぞれ grep パッケージのバージョンは 2.5.1-50vl2 と 2.5.1.ds2-6"
  (if fixed-p
      (let* ((vars '("LC_ALL" "LC_CTYPE" "LANG"))
             (orig (mapcar (lambda (v) (cons v (getenv v))) vars)))
        (mapcar (lambda (v) (setenv v "C")) vars)
        (unwind-protect
            ad-do-it
          (mapcar (lambda (v) (setenv v (cdr (assoc v orig)))) vars)))
    ad-do-it))

以下、経緯の記録

バグレポート (2007-02-21 21:06:10)

  • 2ch3:250 - 何はともあれ…
    • バイトコンパイルしていない howm を用意
    • *scratch* バッファに「(setq debug-on-quit t)」と書く
    • 閉じ括弧の後にカーソルを置く
    • C-j を押す
    • howm を起動し, 問題の現象を発症させる
    • C-g を押す
    • *Backtrace* バッファに表示された内容を BugReportPaste に貼る
  • できれば make test もお願いします
  • thx > BugReportPaste. make test して, 以下を *scratch* に貼り付け, 各行末で C-j した結果を教えていただけますか?
(mapcar (lambda (d) (and (file-executable-p (expand-file-name "grep" d)) d)) exec-path)
(car (howm-call-process "grep" '("--version")))
(mapcar #'getenv '("LC_ALL" "LC_CTYPE" "LANG"))
  • あと念のため, シェルから以下のコマンドが問題なく実行できることも確認ください.
echo "テスト" | \grep -F -i -Hnr -f - /home/XXXXX/howm/
  • 2007-02-17 (土) 00:30:58 2ch3:250 : BugReportPaste に結果を書いておきました。よろしくお願いします。


BugReportPaste (2007-02-21 21:09:58)

追記 : s検索でCPU使用率100%となりhowmが反応しなくなる - 2ch3:250 - 2ch3:250 (2007-02-17 (土) 00:00:53)

すみません。Hikiでコメントのところに複数行書く方法がわから なかったので、こちらに バグレポート の結果を書きます。

(mapcar (lambda (d) (and (file-executable-p (expand-file-name "grep" d)) d)) exec-path) (nil nil nil nil nil nil "/bin" nil nil nil nil nil ...)

(car (howm-call-process "grep" '("--version"))) "grep (GNU grep) 2.5.1"

(mapcar #'getenv '("LC_ALL" "LC_CTYPE" "LANG")) (nil nil "ja_JP.eucJP")

echo "テスト" | \grep -F -i -Hnr -f - /home/XXXXX/howm/ 5分間待っても結果が表示されません。動作が固まっているようです。topコマンドで調べると、grepがCPU使用率の90%以上を占めていました。 固まった動作はC-cで止めることはできました。

  • 2007-02-17 (土) 01:08:26 2ch3:250 : echo "テスト" | \grep -i -Hnr -f - /home/XXXXX/howm/ のように -F オプションを外したら検索結果が返ってきました。700個ほどメモがありますが検索時間は3秒くらいでした。
  • thx. これは vine-4.0 の grep が変かも. ↓でも発症しますよね?
echo a | fgrep -i "あ"
  • 2007-02-17 (土) 12:15:40 2ch3:250 : はい、発症しました。Vine3.2のPCでは大丈夫でした。念のため、こちらのPCにVine4.0のgrepパッケージを持っていって試した
  • 2007-02-17 (土) 12:19:01 名無しさん : ところ(src.rpmからrebuild)、発症しました。うーん、Vine4.0のgrepがあやしいようですね。
  • おっと, debian の新しいやつ(sid)の grep (2.5.1.ds2-6) でも発症しました.
  • こうすると固まりませんね… (vine-4.0)
echo a | eng fgrep -i "あ"
  • ということでその場しのぎ策:
;; howm-test061231 でテスト
(defadvice howm-real-grep (around avoid-fgrep-bug
                           (str file-list &optional fixed-p force-case-fold)
                           activate)
  "vine-4.0 や debian sid で「echo a | fgrep -i 'あ'」が固まるバグを回避.
それぞれ grep パッケージのバージョンは 2.5.1-50vl2 と 2.5.1.ds2-6"
  (if fixed-p
      (let* ((vars '("LC_ALL" "LC_CTYPE" "LANG"))
             (orig (mapcar (lambda (v) (cons v (getenv v))) vars)))
        (mapcar (lambda (v) (setenv v "C")) vars)
        (unwind-protect
            ad-do-it
          (mapcar (lambda (v) (setenv v (cdr (assoc v orig)))) vars)))
    ad-do-it))
  • で, fgrep (grep -Fi)のバグ報告は誰にすればいいんだろう?
  • 2007-02-18 (日) 16:00:43 2ch3:250 : 今回の件はhowmではなくgrep側のバグが原因みたいですね。あとで要点をまとめてVine BTSあたりにでも報告してみようと思います。
  • 上の「その場しのぎ策」はいかがだったでしょうか?
  • 2007-02-18 (日) 18:53:52 2ch3:250 : 「その場しのぎ策」ですが howm1.3.4 と test061231 でテストしてみたところ、問題なくs検索できるようになりました。快適に使用できています。どうもありがとうございました。

(Please LogIn to post comments.)

Last modified:2016/03/21 20:36:57
Keyword(s):
References:[BugReportPaste] [バグレポート]