在 emacs 上執行 rgrep 時,Grep 異常退出,代碼為 123

在 emacs 上執行 rgrep 時,Grep 異常退出,代碼為 123

問候 Emacsers 同胞

我在「Ubuntu 10.04.1 LTS」上執行 GNU Emacs 23.1.1,並且我在標準 Linux 核心原始碼 (vanilla) 上使用內建 Mx rgrep 執行的任何搜尋都會提前結束,並在 emacs echo 中列印以下錯誤區域:

Grep exited abnormally with code 123

我在 Redhat 系統上也看到它有一段時間了,還有其他(大型)程式碼庫,有人看到或更好地解決了這個問題嗎?

謝謝!

編輯:出於我之外的原因,stackexchange 不允許我編輯下面的評論,所以我將在這裡更新。

按照下面的評論,我嘗試運行 rgrep 在 emacs shell 緩衝區中運行的相同命令

 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

根據吉爾斯的評論,我嘗試跑步

/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 有關。

答案1

查看 xargs 退出程式碼文件:

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

但根據 grep 文件 1 是退出狀態,如果 grep 與模式不匹配

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

答案2

看起來您正在嘗試透過一堆 C .c 和 .h 檔案進行遞歸 grep,同時忽略版本控制系統使用的目錄。你想要確認。看http://betterthangrep.com/

在 ack 中執行您正在做的事情的命令:

ack --cc -i v4l_compat_ioctl32

-r、-n 和 -H 的影響在 ack 中假設。 -i 仍然不區分大小寫,--cc 表示“僅搜尋 *.c 和 *.h 檔案”

無需尋找。不需要 xargs。只需安裝一個 Perl 版本和一個 Perl 程序,沒有外部模組。

相關內容