我想观看一个文件,该文件每5分钟就会被覆盖less
。如何使less
遵循新文件描述符而不是保持旧文件描述符显示?watch "cat file"
不会这样做,因为文件太长而无法放入一个终端窗口中。
tail -f
的手册页中所定义)。但是尽管如此,我已经澄清了我的问题。
less --follow-name
请参阅unix.stackexchange.com/a/74287/112522
我想观看一个文件,该文件每5分钟就会被覆盖less
。如何使less
遵循新文件描述符而不是保持旧文件描述符显示?watch "cat file"
不会这样做,因为文件太长而无法放入一个终端窗口中。
tail -f
的手册页中所定义)。但是尽管如此,我已经澄清了我的问题。
less --follow-name
请参阅unix.stackexchange.com/a/74287/112522
Answers:
您可以通过在中查看文件时发出F
命令(Shift+F
)来获得此效果less
。要停止关注并切换回分页,请按Ctrl+C
由于文件仅每5分钟更改一次,因此您也可以使用tail -f
更长的睡眠时间并指定更长的睡眠时间-s
(默认为1秒)。例如,
tail -f -s 60 myfile
myfile
每60秒检查一次输出。
编辑:由于误导性的问题,上述答案不能令人满意。第二次尝试如下:
要less
每5分钟重新打开一个文件,请尝试以下操作:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
这将产生一个子shell,该子shell在后台运行另一个shell进程,该进程指示在5分钟后终止其父进程。然后使用打开文件less
。当后台的shell命令杀死父子shell时,它将杀死其所有子节点,包括“ less”命令。然后循环再次开始该过程。
我知道要杀死它的唯一简单方法是杀死原始shell所在的终端。如果这是不可接受的,则可以使用“ killfile”技巧:
touch killfile
while [ -f killfile]; do stuff; done
要停止这样做stuff
,rm
将killfile放在另一个shell中。
watch -n 1 less <filename>
您可以在中执行类似的操作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
尾巴是你的朋友。“ tail -f filename”将在出现新行时向您显示。
或者,如果您要查找文件中间的更改,也许每隔几分钟运行一次脚本以将文件副本复制到临时位置并对其进行比较?
tail -f
仍会读取旧的文件描述符。