$ tail -f testfile
the command is supposed to show the latest entries in the specified file, in real-time right? But that’s not happening. Please correct me, if what I intend it to do is wrong…
I created a new file “aaa” and added a line of text and closed it. then issued this command (first line):
$ tail -f aaa xxx xxa axx
the last three lines are the contents of the file aaa. Now that the command is still running (since I used -f), I opened the file aaa via the GUI and started adding a few more lines manually. But the terminal doesn’t show the new lines added in the file.
What’s wrong here? The tail -f command only shows new entries if they are written by system only? (like log files etc)
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
From the tail(1) man page:
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.
Your text editor is renaming or deleting the original file and saving the new file under the same filename. Use -F instead.
Method 2
Your editor has its own buffer for the file. When you modify the text in the editor, nothing is written to the file itself.
When you save your changes, chances are that the editor simply deletes the old file and create a new one. tail -f will still be connected to the deleted file, so it won’t show anything new.
Method 3
tail “refresh” each 1 second by default, not realtime.
Try with this (you need bash4):
- Open 2 terminals.
- In the first terminal execute
touch ~/output.txtandtail -f ~/output.txt. - In the second terminal execute
for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done - Look at the output of tail in the first terminal.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0