I want to watch a file that gets overwritten every 5 minutes with
less. How can I make
less follow the new file descriptor instead of keeping the old one displayed?
watch "cat file" won't do it because the file is too long to fit into one terminal window.
You can get this effect by issuing the
F command (
Shift+F) while viewing the file in
less. To stop following and switch back to paging, press
Since your file only changes every 5 minutes, you could also use
tail -f and specify a longer sleep time with
-s (defaults to 1 second). For instance,
tail -f -s 60 myfile
myfile for output every 60 seconds.
EDIT: Due to misleading question, the above answer was unsatisfactory. Second attempt follows:
To re-open the same file in
less every 5 minutes, try this:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
This will spawn a subshell which backgrounds another shell process instructed to kill its parent process after 5 minutes. Then it opens the file with
less. When the backgrounded shell command kills the parent subshell, it kills all its children, including the "less" command. Then the loop starts the process over again.
The only easy way I know of to kill this is to kill the terminal your original shell is in. If that's unacceptable, you can use the "killfile" trick:
touch killfile while [ -f killfile]; do stuff; done
To stop doing
rm the killfile in another shell.
You can do something similar in
Start a server session of
vim -R --servername refresh_session
Then in another console, monitor the file for updates and tell the vim session to reload the file as soon as it gets updated:
inotifywait -e close_write -m your_log_file | while read filename events; do vim --servername refresh_session --remote $filename done
A few gotchas.
- This will of course not work if your
vimis not compiled with the
inoifywaitwill stop working when the file gets deleted. So I hope your file gets overwritten. It is possible to work around that, too, of course.
And if you want to have a more
less-like experience, you can use the
less macros to get your
less key bindings in
/usr/share/vim/vim73/macros/less.sh --servername refresh_session
I found an old, but very good "less" like program (a "pager"). It has a "R" command that refresh the file.
It's called "lv", You can install it on Ubuntu using:
sudo apt install lv
However, it seems to have no autoreload feature.
You might try this command: tail -f file
Tail is your friend. "tail -f filename" will show you new lines when they appear.
Or if you are looking for changes made in the middle of the file, maybe run a script every few minutes to make a copy of the file to a temp location and do a diff on it?