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 и xargs и дополнена кодом выхода 0
/home/mcradle/linux> echo $? 0
похоже, что-то с xargs.
`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, и эту ошибку нужно либо подавить, либо заменить на такую командную строку, как
Похоже, вы пытаетесь выполнить рекурсивный 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