weniger mit "Datei aktualisieren"-ähnlicher Funktionalität

weniger mit "Datei aktualisieren"-ähnlicher Funktionalität

Ich möchte eine Datei überwachen, die alle 5 Minuten mit überschrieben wird less. Wie kann ich erreichen, lessdass der neue Dateideskriptor verwendet wird, anstatt den alten anzuzeigen? watch "cat file"Das geht nicht, da die Datei zu lang ist, um in ein Terminalfenster zu passen.

Antwort1

Sie können diesen Effekt erzielen, indem Sie den FBefehl ( Shift+F) eingeben, während Sie die Datei in anzeigen less. Um die Verfolgung zu beenden und zur Seitenanzeige zurückzukehren, drücken SieCtrl+C

Da sich Ihre Datei nur alle 5 Minuten ändert, können Sie auch tail -feine längere Ruhezeit angeben -s(standardmäßig 1 Sekunde). Zum Beispiel:

tail -f -s 60 myfile

überprüft myfilealle 60 Sekunden die Ausgabe.

EDIT: Aufgrund irreführender Fragestellung war die obige Antwort unbefriedigend. Zweiter Versuch folgt:

lessUm alle 5 Minuten dieselbe Datei erneut zu öffnen , versuchen Sie Folgendes:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Dadurch wird eine Subshell gestartet, die einen anderen Shell-Prozess in den Hintergrund stellt und anweist, den übergeordneten Prozess nach 5 Minuten zu beenden. Dann öffnet sie die Datei mit less. Wenn der Shell-Befehl im Hintergrund die übergeordnete Subshell beendet, beendet er auch alle ihre untergeordneten Prozesse, einschließlich des Befehls „less“. Dann startet die Schleife den Prozess erneut.

Die einzige mir bekannte einfache Möglichkeit, dies zu beenden, besteht darin, das Terminal zu beenden, in dem sich Ihre ursprüngliche Shell befindet. Wenn das nicht akzeptabel ist, können Sie den Trick „killfile“ verwenden:

touch killfile
while [ -f killfile]; do stuff; done

Um dies zu unterbinden stuff, rmführen Sie die Killdatei in einer anderen Shell aus.

Antwort2

Sie können etwas Ähnliches in tun vim.

Starten Sie eine Serversitzung von vim:

vim -R --servername refresh_session

Überwachen Sie dann in einer anderen Konsole die Datei auf Aktualisierungen und weisen Sie die Vim-Sitzung an, die Datei neu zu laden, sobald sie aktualisiert wird:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Ein paar Fallstricke.

  • Dies funktioniert natürlich nicht, wenn Ihre Datei nicht mit dieser Funktion vimkompiliert wurde .clientserver
  • inoifywaitfunktioniert nicht mehr, wenn die Datei gelöscht wird. Ich hoffe also, dass Ihre Datei überschrieben wird. Natürlich kann man das auch umgehen.

Und wenn Sie ein eher -ähnliches Erlebnis wünschen less, können Sie die lessMakros verwenden, um Ihre lessTastenkombinationen einzufügen vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

Antwort3

Sie können diesen Befehl versuchen: tail -f file

Antwort4

Ich habe ein altes, aber sehr gutes Programm ähnlich „less“ gefunden (einen „Pager“). Es hat einen „R“-Befehl, der die Datei aktualisiert.

Es heißt"lv"Sie können es auf Ubuntu wie folgt installieren:

sudo apt install lv

Es scheint jedoch keine Funktion zum automatischen Neuladen zu haben.

verwandte Informationen