Wenn Sie versuchen, sehr lange Ausgaben von bestimmten Warnungen oder Fehlermeldungen zu filtern, wäre die erste Idee etwa so:
%Vor% Das Ergebnis ist jedoch nicht vollständig zufriedenstellend. Die Ausgabe enthält nicht nur die Filterergebnisse von grep
, sondern auch stdout
und stderr
Nachrichten von anderen Werkzeugen, die irgendwo im make
Ziel verwendet werden.
Die Frage ist jetzt:
Um die Fragen zu beantworten:
stdout
von make
mit stdin
von grep. make
's stderr
ist immer noch mit dem Terminal verbunden und wird daher ohne Filterung ausgedruckt. Die Lösung ist connect make
s stderr
mit stdin
und Ignoriere stdin
Dies druckt nur die Ausgabe von grep, aber nichts von make oder anderen Tools wie rm
.
Ich wollte nur die Warnungen meines Compilers sehen. Die Verwendung der stillen Option von make brachte mich dazu, wo ich wollte.
Von der make man-Seite:
%Vor%Es gab immer noch eine große Anzahl von Compiler-Warnungen, die ich ignorieren wollte, also habe ich die CFLAGS gesetzt, als ich make
aufgerufen habezum Beispiel:
%Vor%Wenn ich nur an einer bestimmten Datei oder einem bestimmten Satz von Dateien interessiert bin, verwende ich den Befehl touch gefolgt von einem stillen make.
Tippen Sie auf foo.c; make -s CFLAGS="- Wno-veraltete Deklarationen"
Ursprünglich habe ich versucht, die Ausgabe zu grep zu machen, aber es ist sauberer, still zu rufen, die Kompilierungswarnungen zu kontrollieren und Dateien zu berühren, um die Kompilierung zu begrenzen. Nach all dem könnten Sie immer noch grep verwenden, aber ich würde zuerst die Manpages des Build-Systems und des Compilers betrachten.
Schließen Sie den stderr aus:
%Vor% Wie in den Kommentaren zu sehen ist, wird die gesamte make
-Ausgabe als stderr angegeben, so dass die erste Lösung überhaupt nicht zusammenpasst. Daher ist mein Vorschlag, das folgende zu verwenden:
Und dann grep die make_output.log
. Wie auf Wie schreibe ich stderr in eine Datei, während Sie "tee" mit einer Pipe verwenden? .