Grep аварийно завершает работу с кодом 123 при запуске rgrep на emacs

7817
Mcradle

Приветствую товарищ Emacsers

Я использую GNU Emacs 23.1.1 в «Ubuntu 10.04.1 LTS», и любой поиск, который я выполняю с использованием встроенного Mx rgrep в стандартном исходном коде ядра Linux (vanilla), преждевременно заканчивается следующей ошибкой, выведенной в emacs echo площадь:

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 \*/\ \) -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.

7
`Mx rgrep` работает` find… | xargs grep… `и 123 означает, что по крайней мере один из вызовов` xargs` `grep` вернул ненулевой код ошибки. Если это происходит только в больших базах кода, это может быть связано с `xargs`, вызывающим более одного экземпляра` grep` (возможно, один экземпляр не находит файл?). Создан ли буфер `* grep *`? Gilles 14 лет назад 1
он открывает буфер *** grep ***, даже показывает кучу результатов, а затем выдает «Grep аварийно завершился с кодом 123 в ...» Mcradle 14 лет назад 0

2 ответа на вопрос

9
Mcradle

Глядя на документацию кода выхода 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
Andy Lester

Похоже, вы пытаетесь выполнить рекурсивный grep через кучу файлов C .c и .h, игнорируя при этом каталоги, используемые системами контроля версий. Вы хотите, чтобы. Смотрите http://betterthangrep.com/

Команда, чтобы сделать именно то, что вы делаете, в ack:

ack --cc -i v4l_compat_ioctl32 

Эффекты -r, -n и -H предполагаются в ack. Параметр -i по-прежнему не учитывает регистр, а --cc говорит: «Искать только файлы * .c и * .h».

Нет необходимости искать. Нет необходимости в xargs. Только установленная версия Perl и одна программа Perl без внешних модулей.

Спасибо Энди. Я установил ack, но так и не смог скачать и установить ack.el для emacs, в конце концов я мог бы это сделать. Mcradle 14 лет назад 0

Похожие вопросы