Grep sale de forma anormal con el código 123 cuando se ejecuta rgrep en emacs

Grep sale de forma anormal con el código 123 cuando se ejecuta rgrep en emacs

Saludos compañeros de Emacs

Estoy ejecutando GNU Emacs 23.1.1 en "Ubuntu 10.04.1 LTS" y cualquier búsqueda que realice usando el Mx rgrep integrado en el código fuente estándar del kernel de Linux (vainilla) finaliza prematuramente con el siguiente error impreso en el eco de emacs área:

Grep exited abnormally with code 123

También lo he estado viendo durante un tiempo en sistemas Redhat y con otras bases de código (grandes). ¿Alguien ha visto eso o incluso lo ha solucionado mejor?

¡Gracias!

Editar: por razones ajenas a mí, stackexchange no me permite editar mi comentario a continuación, así que lo actualizaré aquí.

siguiendo el comentario a continuación, intenté ejecutar el mismo comando que ejecuta rgrep en un búfer de shell de 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

si bien no imprime ningún error, al interrogar el código de salida muestra el mismo 123 nuevamente.

/home/mcradle/linux> echo $?
123

siguiendo el comentario de Gilles, he intentado ejecutar

/home/mcradle/linux> find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l_compat_ioctl32 '{}' \;

que es funcionalmente equivalente a la combinación find y xargs y se completa con el código de salida 0

/home/mcradle/linux> echo $?
0

entonces parece ser algo con xargs.

Respuesta1

Mirando la documentación del código de salida de xargs:

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

pero según la documentación de grep, 1 es el estado de salida si grep no coincide con el patrón

EXIT STATUS
   Normally, the exit status is 0 if selected lines are found and 1 otherwise.  

Entonces, a mí me parece que la línea de comando que usa emacs para emitir una búsqueda 'rgrep' siempre devolverá 123, y este error debe suprimirse o reemplazarse con una línea de comando como

find . -type f \( -name \*.\[ch\] \) -exec grep -i -nH -e v4l

Respuesta2

Parece que estás intentando realizar un grep recursivo a través de un montón de archivos C .c y .h, mientras ignoras los directorios utilizados por los sistemas de control de versiones. Quieres respuesta. Verhttp://betterthangrep.com/

El comando para hacer exactamente lo que estás haciendo, en ack:

ack --cc -i v4l_compat_ioctl32

Los efectos de -r, -n y -H se suponen en ack. -i todavía no distingue entre mayúsculas y minúsculas y --cc dice "Buscar archivos *.c y *.h únicamente"

No es necesario buscarlo. No hay necesidad de xargs. Sólo una versión de Perl instalada y un único programa Perl, sin módulos externos.

información relacionada