Grep wird mit Code 123 nicht normal beendet, wenn rgrep auf Emacs ausgeführt wird

7962
Mcradle

Viele Grüße, Emacsers

Ich verwende GNU Emacs 23.1.1 auf "Ubuntu 10.04.1 LTS" und jede Suche, die ich mit dem eingebauten Mx rgrep auf dem Standard-Linux-Kernel-Quellcode (Vanilla) durchführe, endet vorzeitig mit dem folgenden Fehler, der im emacs-Echo gedruckt wird Bereich:

Grep exited abnormally with code 123 

Ich habe es auch schon eine Weile auf Redhat-Systemen gesehen und mit anderen (großen) Codebasen. Hat jemand das gesehen oder sogar besser geheilt?

Vielen Dank!

Edit: Aus Gründen, die über mich hinausgehen, erlaubt es mir stackexchange nicht, meinen Kommentar unten zu bearbeiten, also werde ich hier aktualisieren.

Nach dem folgenden Kommentar 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 \*/\ \) -prune -o -type f \( -name \*.\[ch\] \) -p rint0 | xargs -0 -e grep -i -nH -e v4l_compat_ioctl32 

Während es keinen Fehler ausgibt, zeigt die Abfrage des Exit-Codes wieder die gleiche 123.

/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 entspricht funktional der Kombination find und xargs und wird mit dem Exit-Code 0 abgeschlossen

/home/mcradle/linux> echo $? 0 

also scheint es etwas mit xargs zu sein.

7
`Mx rgrep` läuft` find… | xargs grep… `und 123 bedeutet, dass mindestens einer der Aufrufe von` xargs` von `grep` einen Fehlercode ungleich Null zurückgegeben hat. Wenn dies nur in großen Codebasen geschieht, könnte dies mit xargs zusammenhängen, die mehr als eine Instanz von 'grep' aufrufen (vielleicht findet eine Instanz keine Datei?). Ist ein "* grep" -Puffer erstellt? Gilles vor 13 Jahren 1
es öffnet den *** grep *** -Puffer zeigt sogar eine Reihe von Ergebnissen und druckt dann "Grep wurde abnormal mit Code 123 um ... beendet" Mcradle vor 13 Jahren 0

2 Antworten auf die Frage

9
Mcradle

Betrachten Sie die xargs-Exit-Code-Dokumentation:

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

laut grep-dokumentation 1 ist jedoch 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.  

Es scheint mir, dass die Befehlszeile, die emacs verwendet, um eine 'rgrep'-Suche auszuführen, immer 123 zurückgibt, und dieser Fehler muss entweder unterdrückt oder durch eine Befehlszeile wie z. B. ersetzt werden

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

Es sieht so aus, als würden Sie versuchen, rekursive grep durch eine Reihe von C .c- und .h-Dateien zu erstellen, während Sie die von Versionskontrollsystemen verwendeten Verzeichnisse ignorieren. Du willst Ack. Siehe http://betterthangrep.com/

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

ack --cc -i v4l_compat_ioctl32 

Die Wirkungen von -r, -n und -H werden in ack angenommen. Das -i unterscheidet immer noch zwischen Groß- und Kleinschreibung, und --cc sagt "Nur * .c- und * .h-Dateien suchen"

Keine Notwendigkeit zu finden. Keine Notwendigkeit für Xargs. Nur eine installierte Version von Perl und ein einziges Perl-Programm ohne externe Module.

Danke, Andy. Ich habe ack installiert, bin aber nie gekommen, um ack.el für emacs herunterzuladen und zu installieren. Mcradle vor 13 Jahren 0