
Ich möchte eine Datei überwachen, die alle 5 Minuten mit überschrieben wird less
. Wie kann ich erreichen, less
dass 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 F
Befehl ( 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 -f
eine längere Ruhezeit angeben -s
(standardmäßig 1 Sekunde). Zum Beispiel:
tail -f -s 60 myfile
überprüft myfile
alle 60 Sekunden die Ausgabe.
EDIT: Aufgrund irreführender Fragestellung war die obige Antwort unbefriedigend. Zweiter Versuch folgt:
less
Um 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
, rm
fü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
vim
kompiliert wurde .clientserver
inoifywait
funktioniert 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 less
Makros verwenden, um Ihre less
Tastenkombinationen 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.