tail -f mit less + F kombinieren funktioniert nicht

769
Tom Bennett

Ich benutze Ubuntu Bash. Ich versuche, tail -f und less + F wie unten zu kombinieren, und es kommt nichts heraus.

tail -f long_running_log | less +F 

long_running_log ist eine Protokolldatei, die ständig von einem anderen Prozess geschrieben wird. Die folgende Zeile zeigt eine Menge Zeug auf der Konsole: tail -f long_running_log Aber wenn ich es mit less + F mit einer Pipe kombiniere, kommt nichts heraus.

Falls Sie sich fragen, warum ich das mache, liegt es daran, dass ich die Ergebnisse des Schwanzes auf dem Weg herausfiltern möchte. Der eigentliche Befehl sieht folgendermaßen aus: tail -f long_running_log | filter1 | filter2 | weniger + F

Zu Debugging-Zwecken habe ich filter1 und filter2 in der Mitte entfernt und habe immer noch Probleme.

1

1 Antwort auf die Frage

0
Dan Cornilescu

Von weniger Manpage:

 F Scroll forward, and keep trying to read when the end of file is reached. Normally this com- mand would be used when already at the end of the file. It is a way to monitor the tail of a file which is growing while it is being viewed. (The behavior is similar to the "tail -f" command.) 

Das Problem ist, dass Sie keine EOF erhalten, solange die Pipeline noch läuft (dh der Schwanz läuft noch). Sie können dies mit einer Strg-C überprüfen, die die Pipeline abtötet. Die gefilterte Ausgabe wird dann angezeigt.

Sie können das Piping entweder vollständig auf "less + F" ablegen (die gefilterte Ausgabe wird fortlaufend im Terminal angezeigt) oder die gefilterte Ausgabe in eine andere Datei umleiten, die Sie dann mit "less + F that_log_file" überwachen können .

Warum ist es dann möglich, weniger + F long_running_log_file auszuführen und die letzten Teile der Protokolldatei wie tail -f anzuzeigen, jedoch mit mehr Funktionen. Tom Bennett vor 9 Jahren 0
Weil long_running_log_file eine "echte" Datei ist und somit EOF jederzeit für die 'less + F'-Funktionalität verfügbar ist. Dan Cornilescu vor 9 Jahren 0
Den gleichen Effekt sehen Sie, wenn Sie zu "less" pfeifen (ohne "+ F") und die Taste ** End ** drücken. Beide Befehle werden angehalten, während das Dateiende gesucht wird, das erst erreicht wird, wenn die Pipe geschlossen wird. Der Befehl 'p' verhält sich ähnlich, aber er sagt Ihnen, was er tut, und fordert Sie auf, zu unterbrechen. AFH vor 9 Jahren 0