仲間の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を使用したもののようです。
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
バージョン管理システムで使用されるディレクトリを無視して、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プログラムのみで、外部モジュールはありません。