La modification du fichier texte avec Vim ne met pas à jour tail -f

17

J'utilise tail -f a.txtpour regarder les mises à jour d'un fichier appelé a.txt.

Si je mets à jour le fichier en utilisant quelque chose comme ls -a >> a.txtdans une deuxième console virtuelle, les modifications s'afficheront en temps réel dans la première.

Si je mets à jour le fichier à l'aide de Vim dans une deuxième console virtuelle, les modifications ne s'afficheront pas dans la première.

Je ne m'attends pas nécessairement à ce qu'il déclenche une mise à jour dans cette fenêtre - mais pourquoi exactement cela ne met-il pas à jour le terminal exécutant la tail -fcommande?

alex
la source
5
tail -fvérifie les annexes. tail -Fvérifie les noms de fichiers.
thrig

Réponses:

31

Si vous modifiez un fichier avec vim, il lit généralement le fichier en mémoire, puis écrit un nouveau fichier. Il tailfonctionne donc maintenant sur une copie obsolète du fichier (qui reste dans le système de fichiers jusqu'à ce que tail(et tout autre programme) cesse de l'utiliser).

Vous pouvez faire tailsuivre le nom du fichier (plutôt que le fichier) en utilisant:

tail -F yourfile  

Notez les majuscules F .

Bob Eager
la source
1
tail -Ftravaux! La console affiche maintenant un message du type "a.txt a été remplacé: à la fin du nouveau fichier" et se met à jour en conséquence. Merci!
alex
8

Ma compréhension est que, généralement, lors de la modification avec vim, vous modifiez une copie du fichier, qui est déplacée en place lorsque vous écrivez vos modifications sur le disque. Étant donné que cela se produit en unlinking l'original et moveing le nouveau en place, tailne voit pas de nouvelles modifications dans le fichier d'origine.

DopeGhoti
la source