Beim Bearbeiten einer Textdatei mit Vim wird tail -f nicht aktualisiert

17

Ich verwende tail -f a.txt, um Updates für eine Datei namens zu sehen a.txt.

Wenn ich die Datei mithilfe ls -a >> a.txteiner zweiten virtuellen Konsole aktualisiere , werden die Änderungen in der ersten in Echtzeit angezeigt.

Wenn ich die Datei mit Vim in einer zweiten virtuellen Konsole aktualisiere, werden die Änderungen in der ersten nicht angezeigt.

Ich erwarte nicht unbedingt, dass es ein Update in diesem Fenster auslöst - aber warum aktualisiert dieses Update nicht das Terminal, auf dem der tail -fBefehl ausgeführt wird?

Alex
quelle
5
tail -fprüft auf Anhänge. tail -FÜberprüft, ob Dateien umbenannt wurden.
Thrig

Antworten:

31

Wenn Sie eine Datei mit bearbeiten vim, liest sie normalerweise die Datei in den Speicher und schreibt dann eine neue Datei. Wir arbeiten tailjetzt an einer veralteten Kopie der Datei (die im Dateisystem verbleibt, bis sie tail(und jedes andere Programm) nicht mehr verwendet wird.

Sie können festlegen, taildass der Dateiname (anstelle der Datei) folgt, indem Sie Folgendes verwenden:

tail -F yourfile  

Beachten Sie die Großbuchstaben F .

Bob Eager
quelle
1
tail -Ffunktioniert! In der Konsole wird nun die Meldung "a.txt wurde ersetzt: Nach dem Ende der neuen Datei" angezeigt und entsprechend aktualisiert. Vielen Dank!
Alex
8

Nach meinem Verständnis bearbeiten vimSie beim Bearbeiten mit in der Regel eine Kopie der Datei, die beim Schreiben Ihrer Änderungen auf die Festplatte an ihren Platz verschoben wird. Da dies geschieht, indem unlinkdas Original und movedas Neue in Position gebracht werden, werden tailkeine neuen Änderungen an der Originaldatei angezeigt.

DopeGhoti
quelle