問候 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 程序,沒有外部模組。