我想查看每 5 分钟被覆盖一次的文件less
。我怎样才能让less
遵循新的文件描述符而不是保持显示旧的?watch "cat file"
不会这样做,因为文件太长,无法在一个终端窗口中容纳。
答案1
您可以在查看 中的文件时发出F
命令 ( ) 来实现此效果。要停止跟踪并切换回分页,请按Shift+F
less
Ctrl+C
由于您的文件每 5 分钟才更改一次,因此您也可以使用tail -f
并指定更长的休眠时间-s
(默认为 1 秒)。例如,
tail -f -s 60 myfile
每 60 秒检查myfile
一次输出。
编辑:由于问题误导,上述答案不令人满意。第二次尝试如下:
less
要每 5 分钟重新打开同一个文件,请尝试以下操作:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
这将生成一个子 shell,该子 shell 将另一个 shell 进程置于后台,并指示其在 5 分钟后终止其父进程。然后它使用 打开文件less
。当后台 shell 命令终止父子 shell 时,它会终止其所有子 shell,包括“less”命令。然后循环再次启动该过程。
我知道的唯一简单的解决方法是关闭你原来的 shell 所在的终端。如果这不可接受,你可以使用“killfile”技巧:
touch killfile
while [ -f killfile]; do stuff; done
要停止执行stuff
,rm
请在另一个 shell 中运行 killfile。
答案2
您可以在 中做类似的事情vim
。
启动服务器会话vim
:
vim -R --servername refresh_session
然后在另一个控制台中,监视文件更新并告诉 vim 会话在文件更新后立即重新加载文件:
inotifywait -e close_write -m your_log_file | while read filename events; do
vim --servername refresh_session --remote $filename
done
一些陷阱。
- 如果您的编译版本中
vim
没有该功能,那么这当然不会起作用。clientserver
inoifywait
当文件被删除时将停止工作。所以我希望你的文件被覆盖。当然,也可以解决这个问题。
如果您想要获得更less
类似的体验,您可以使用less
宏来获取您的less
按键绑定vim
。
/usr/share/vim/vim73/macros/less.sh --servername refresh_session
答案3
您可以尝试这个命令:tail -f file
答案4
我找到了一个老旧但非常好用的“less”类程序(“pager”)。它有一个“R”命令,可以刷新文件。
它被称为“吕”,你可以在 Ubuntu 上使用以下命令安装它:
sudo apt install lv
但是,它似乎没有自动重新加载功能。