grep stimmt nicht mit nc-Ausgabe überein - tee gibt keine Ausgabe aus

grep stimmt nicht mit nc-Ausgabe überein - tee gibt keine Ausgabe aus

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.

verwandte Informationen