
Ich führe eine Anwendung aus und leite die Ausgabe an weiter grep
. Das funktioniert. Ich möchte die Ausgabe jedoch sowohl auf dem Bildschirm anzeigen als auch in eine Datei schreiben.
Also leite ich das grep
Ergebnis weiter an tee
:
./app | grep something | tee file.txt
Es werden jedoch keine Ergebnisse angezeigt (oder geschrieben), selbst wenn 100 % Ergebnisse vorliegen (ich habe dies mit zwei laufenden Instanzen bestätigt).
Wie greife ich auf die Ausgabe der App zu, schreibe sie in eine Datei und zeige sie auf dem Bildschirm an?
Antwort1
Der Befehl sollte, so wie Sie ihn geschrieben haben, funktionieren. Für die fehlerhafte Funktion des Befehls kann es mehrere Gründe geben.
- Die App sendet den Ausgabetext an einen anderen Ausgang als den Standard.
- Die Zeichenkette für die Suche mit dem grep-Befehl ist falsch eingegeben.
Lösung des Falles #1
- Überprüfen Sie manuell, ob die App den gewünschten Text zur Suche an die Ausgabe sendet.
./app
- Leiten Sie den Ausgabetext in eine Datei um
./app > file.txt
und überprüfen Sie den Inhalt der Datei:cat file.txt
- Wenn die Datei nicht den gewünschten Text enthält, liegt es wahrscheinlich daran, dass die Anwendung die Ausgabe an die Fehlerausgabe und nicht an die Standardausgabe sendet. Versuchen Sie daher, auf eine andere Weise auf eine Datei umzuleiten,
./app 2 > file.txt
und überprüfen Sie den Inhalt der Datei erneut:cat file.txt
- Wenn der Inhalt der Datei diesmal korrekt ist, ist die Lösung einfach. Sie müssen lediglich die Fehlerausgabe auf die Standardausgabe umleiten.
./app 2>&1 | grep "something" | tee file.txt
Lösung des Falles #2
- Überprüfen Sie sorgfältig die Zeichenfolge, die Sie als Suchmuster verwenden. Schließen Sie sie in Anführungszeichen oder Apostrophe ein, um zufällige Fehlinterpretationen von Platzhalterzeichen, $variablename-Variablen, regulären Ausdrücken usw. auszuschließen.
- Testen Sie zunächst die Suche mit dem grep für sehr einfache Zeichenfolgen, die nur aus Buchstaben oder Zahlen bestehen und nicht falsch interpretiert werden können.