$ tail -f testfile
la commande est censée afficher les dernières entrées du fichier spécifié, en temps réel non? Mais cela ne se produit pas. Veuillez me corriger, si ce que j'ai l'intention de faire est mal ...
J'ai créé un nouveau fichier "aaa" et ajouté une ligne de texte et l'ai fermé. puis émis cette commande (première ligne):
$ tail -f aaa
xxx
xxa
axx
les trois dernières lignes représentent le contenu du fichier aaa. Maintenant que la commande est toujours en cours d'exécution (puisque j'ai utilisé -f
), J'ai ouvert le fichier aaa via l'interface graphique et j'ai commencé à ajouter manuellement quelques lignes supplémentaires. Mais le terminal n'affiche pas les nouvelles lignes ajoutées dans le fichier.
Qu'est-ce qui ne va pas ici? Le tail -f
la commande affiche uniquement les nouvelles entrées si elles sont écrites uniquement par le système? (comme les fichiers journaux, etc.)
Depuis la tail(1)
page de manuel :
With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail’ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descrip- tor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.
Votre éditeur de texte renomme ou supprime le fichier d'origine et enregistre le nouveau fichier sous le même nom de fichier. Utilisation -F
au lieu.
Votre éditeur a son propre tampon pour le fichier. Lorsque vous modifiez le texte dans l'éditeur, rien n'est écrit dans le fichier lui-même.
Lorsque vous enregistrez vos modifications, il est probable que l'éditeur supprime simplement l'ancien fichier et en crée un nouveau. tail -f
sera toujours connecté au fichier supprimé, il n'affichera donc rien de nouveau.
tail
"rafraîchit" chaque 1 seconde par défaut, pas en temps réel.
Essayez avec ceci (vous avez besoin de bash4):
touch ~/output.txt
et tail -f ~/output.txt
.for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done