it-swarm-ja.com

emacsでrgrepを実行すると、Grepがコード123で異常終了します

仲間のEmacsersにご挨拶

GNU "Ubuntu 10.04.1LTS"でEmacs23.1.1を実行していますが、標準のLinuxカーネルソースコード(Vanilla)で組み込みのMxrgrepを使用して実行した検索は途中で終了しますemacsエコー領域に次のエラーが出力されます。

Grep exited abnormally with code 123

私はRedhatシステムでもしばらくの間それを見てきました、そして他の(大きな)コードベースで、誰かがそれを見た、あるいはもっとよく治しましたか?

ありがとう!

編集:私以外の理由で、stackexchangeでは以下のコメントを編集できないため、ここで更新します。

以下のコメントに続いて、rgrepがemacsシェルバッファーで実行するのと同じコマンドを実行しようとしました

 find . \( -path \*/SCCS -o -path \*/RCS -o -path \*/CVS -o -path \*/MCVS -o -path \*/.svn -o -path \*/.git
-o -path \*/.hg -o -path \*/.bzr -o -path \*/_MTN -o -path \*/_darcs -o -path \*/\{Arch\} \) -Prune -o  -type f \( -name \*.\[ch\] \) -p
rint0 | xargs -0 -e grep -i -nH -e v4l_compat_ioctl32

エラーは出力されませんが、終了コードを調べると、同じ123が再度表示されます。

/home/mcradle/linux> echo $?
123

私が実行しようとしたGillesからのコメントに続いて

/home/mcradle/linux> find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l_compat_ioctl32 '{}' \;

これは、findとxargsの組み合わせと機能的に同等であり、終了コード0で完了します。

/home/mcradle/linux> echo $?
0

したがって、xargsを使用したもののようです。

7
Mcradle

Xargsの終了コードのドキュメントを見る:

123 if any invocation of the command exited with status 1-125

ただし、grepのドキュメントによると、grepがパターンと一致しなかった場合の終了ステータスは1です。

EXIT STATUS
   Normally, the exit status is 0 if selected lines are found and 1 otherwise.  

したがって、私には、emacsが「rgrep」検索を発行するために使用するコマンドラインは常に123を返すようであり、このエラーを抑制するか、次のようなコマンドラインに置き換える必要があります。

find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l
10
Mcradle

バージョン管理システムで使用されるディレクトリを無視して、C.cファイルと.hファイルの束を介して再帰的なgrepを実行しようとしているようです。あなたはackが欲しい。 http://betterthangrep.com/ を参照してください

Ackであなたがしていることを正確に行うためのコマンド:

ack --cc -i v4l_compat_ioctl32

-r、-n、および-Hの効果はackで想定されています。 -iは引き続き大文字と小文字を区別せず、-ccは「* .cおよび* .hファイルのみを検索」と表示します

見つける必要はありません。 xargsは必要ありません。インストールされているPerlのバージョンと単一のPerlプログラムのみで、外部モジュールはありません。

2
Andy Lester