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.
M-x rgrep
wird ausgeführtfind … | xargs grep …
, und 123 bedeutet, dass mindestens einer derxargs
Aufrufe vongrep
einen Fehlercode ungleich Null zurückgegeben hat. Wenn dies nur in großen Codebasen geschieht, kann dies mit demxargs
Aufrufen von mehr als einer Instanz von zusammenhängengrep
(möglicherweise findet eine Instanz keine Datei?). Wird ein*grep*
Puffer erstellt?Antworten:
Betrachten der Dokumentation zum xargs-Exitcode:
Laut grep-Dokumentation ist 1 jedoch der Exit-Status, wenn grep nicht mit dem Muster übereinstimmt
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
quelle
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:
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.
quelle