Siehe ursprüngliche Fragen und Antworten zu grep, das keine Netcat-Ausgabe auf stderr akzeptiert, beivorheriger StackExchange-Beitrag.
Prägnante Antwort. Gefällt mir. Warum führt das Hinzufügen eines T-Stücks am Ende nicht zu einer Ausgabe?
nc -zvv localhost 3100-3200 2>&1 | grep succeeded | tee test.txt
Die ausschließliche Verwendung von tee funktioniert. Die ausschließliche Verwendung von grep funktioniert. Die Verkettung von tee nach grep ergibt keine Ausgabe (Konsole oder Datei).
Irgendwelche Ideen?
Antwort1
DevilaN, Kusalananda,
Vielen Dank. Es war eine Kombination aus meiner Ungeduld und dem Verhalten von grep und nc. Mit dem folgenden Befehl auf meinem Raspberry Pi
nc -nvw1 127.0.0.1 1-65535 2>&1 | grep succeeded | tee test.txt
Alle Ports wurden gescannt, ~dann~ gab die Konsole 6 offene Ports aus. Als ich die Option --line-buffered verwendete, verhielt sich der Befehl wie erwartet (er druckte, sobald sie gefunden wurden).
Außerdem tritt das Pufferverhalten von grep anscheinend nur auf, wenn es in tee weitergeleitet wird. Wenn tee nicht verwendet wird und --line-buffered nicht verwendet wird, druckt grep die offenen Ports trotzdem so aus, wie sie gefunden wurden.
Ohne die Option -w1 wird der erste offene Port von grep auf der Konsole ausgegeben, die Ausgabe bleibt dann jedoch hängen – in diesem Fall ist es tatsächlich die Ausgabe von nc, die hängt.