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

7

Grüße Emacsers

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

Grep exited abnormally with code 123

Ich habe es schon eine Weile auf Redhat-Systemen gesehen, und mit anderen (großen) Codebasen hat jemand das gesehen oder noch besser geheilt?

Vielen Dank!

Bearbeiten: Aus Gründen, die über mich hinausgehen, kann ich meinen Kommentar unten nicht bearbeiten, daher werde ich ihn hier aktualisieren.

Nach dem 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

Während kein Fehler ausgegeben wird, zeigt das Abfragen des Exit-Codes erneut 123 an.

/home/mcradle/linux> echo $?
123

Nach dem Kommentar von Gilles habe ich versucht zu rennen

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

Dies entspricht funktional der Kombination aus find und xargs und wird mit dem Exit-Code 0 abgeschlossen

/home/mcradle/linux> echo $?
0

so scheint es etwas mit xargs zu sein.

Mcradle
quelle
1
M-x rgrepwird ausgeführt find … | xargs grep …, und 123 bedeutet, dass mindestens einer der xargsAufrufe von grepeinen Fehlercode ungleich Null zurückgegeben hat. Wenn dies nur in großen Codebasen geschieht, kann dies mit dem xargsAufrufen von mehr als einer Instanz von zusammenhängen grep(möglicherweise findet eine Instanz keine Datei?). Wird ein *grep*Puffer erstellt?
Gilles 'SO - hör auf böse zu sein'
Es öffnet den Grep- Puffer, zeigt sogar eine Reihe von Ergebnissen an und druckt dann "Grep wurde abnormal mit Code 123 um ... beendet"
Mcradle

Antworten:

10

Betrachten der Dokumentation zum xargs-Exitcode:

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

Laut grep-Dokumentation ist 1 jedoch der Exit-Status, wenn grep nicht mit dem Muster übereinstimmt

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

Mir scheint also, dass die Befehlszeile, mit der emacs eine 'rgrep'-Suche ausführt, immer 123 zurückgibt, und dieser Fehler muss entweder unterdrückt oder durch eine Befehlszeile wie z

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

Es sieht so aus, als würden Sie versuchen, eine rekursive Suche durch eine Reihe von C- und H-Dateien durchzuführen, während Sie Verzeichnisse ignorieren, die von Versionskontrollsystemen verwendet werden. 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 Auswirkungen von -r, -n und -H werden in ack angenommen. Das -i unterscheidet immer noch nicht zwischen Groß- und Kleinschreibung, und --cc sagt "Nur * .c- und * .h-Dateien durchsuchen".

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

Andy Lester
quelle
Danke Andy. Ich habe ack installiert, bin aber nie dazu gekommen, ack.el für Emacs herunterzuladen und zu installieren. Vielleicht mache ich das irgendwann.
Mcradle