J'utilise tail -f a.txt
pour regarder les mises à jour d'un fichier appelé a.txt
.
Si je mets à jour le fichier en utilisant quelque chose comme ls -a >> a.txt
dans 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 -f
commande?
tail -f
vérifie les annexes.tail -F
vérifie les noms de fichiers.Réponses:
Si vous modifiez un fichier avec
vim
, il lit généralement le fichier en mémoire, puis écrit un nouveau fichier. Iltail
fonctionne donc maintenant sur une copie obsolète du fichier (qui reste dans le système de fichiers jusqu'à ce quetail
(et tout autre programme) cesse de l'utiliser).Vous pouvez faire
tail
suivre le nom du fichier (plutôt que le fichier) en utilisant:Notez les majuscules
F
.la source
tail -F
travaux! 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!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 enunlink
ing l'original etmove
ing le nouveau en place,tail
ne voit pas de nouvelles modifications dans le fichier d'origine.la source