Grep wird beim Ausführen von rgrep auf Emacs abnormal mit Code 123 beendet

Grep wird beim Ausführen von rgrep auf Emacs abnormal mit Code 123 beendet

Grüße, liebe Emacs-Kollegen

Ich verwende GNU Emacs 23.1.1 auf „Ubuntu 10.04.1 LTS“ und jede Suche, die ich mit dem integrierten Mx rgrep im Quellcode des Standard-Linux-Kernels (Vanilla) durchführe, endet vorzeitig mit dem folgenden Fehler, der in den Echobereich von Emacs ausgegeben wird:

Grep exited abnormally with code 123

Ich sehe es seit einiger Zeit auch auf Redhat-Systemen und bei anderen (großen) Codebasen. Hat das irgendjemand bemerkt oder noch besser behoben?

Danke!

Bearbeiten: Aus Gründen, die mir nicht klar sind, erlaubt mir Stackexchange nicht, meinen Kommentar unten zu bearbeiten, also aktualisiere ich ihn hier.

Im Anschluss an den Kommentar unten habe ich versucht, den gleichen Befehl auszuführen, den rgrep in einem Emacs-Shell-Puffer ausführt

 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

Es wird zwar kein Fehler ausgegeben, aber bei der Abfrage des Exit-Codes wird wieder derselbe 123 angezeigt.

/home/mcradle/linux> echo $?
123

nach dem Kommentar von Gilles habe ich versucht zu laufen

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

Dies ist funktional äquivalent zur Kombination aus find und xargs und wird mit dem Exitcode 0 abgeschlossen.

/home/mcradle/linux> echo $?
0

es scheint also etwas mit xargs zu sein.

Antwort1

Schauen Sie sich die Dokumentation zum Xargs-Exitcode an:

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

aber laut grep-Dokumentation ist 1 der Exit-Status, wenn grep nicht dem Muster entspricht

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

Mir scheint also, dass die Befehlszeile, die Emacs verwendet, um eine 'rgrep'-Suche durchzuführen, immer 123 zurückgibt, und dieser Fehler muss entweder unterdrückt oder durch eine Befehlszeile wie ersetzt werden

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

Antwort2

Es sieht so aus, als würden Sie versuchen, rekursiv durch eine Reihe von C-Dateien (.c und .h) zu grepen und dabei die von Versionskontrollsystemen verwendeten Verzeichnisse zu ignorieren. Sie möchten ack. Siehehttp://betterthangrep.com/

Der Befehl, um genau das zu tun, was Sie tun, in ack:

ack --cc -i v4l_compat_ioctl32

Die Auswirkungen von -r, -n und -H werden in ack angenommen. Bei -i wird weiterhin nicht zwischen Groß- und Kleinschreibung unterschieden und --cc bedeutet "Nur *.c- und *.h-Dateien durchsuchen"

Find ist nicht nötig. Xargs sind nicht nötig. Nur eine installierte Perl-Version und ein einzelnes Perl-Programm, ohne externe Module.

verwandte Informationen