我想观看一个文件,每5分钟用less写一遍。 我怎样才能less跟随新的文件描述符,而不是保持旧的显示? watch "cat file"不会这样做,因为该文件太长,不适合一个terminal窗口。
您可以通过发出F命令( Shift+F )来获得此效果,同时以less查看文件。 要停止closures并切换回分页,请按Ctrl+C
由于您的文件只会每5分钟更改一次,因此您还可以使用tail -f并使用-s指定较长的hibernate时间(默认为1秒)。 例如,
tail -f -s 60 myfile
每60秒检查myfile输出。
编辑:由于误导性的问题,上述答案是不尽人意的。 第二次尝试如下:
要每5分钟重新打开一次相同的文件,试试这个:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
这将产生一个子shell,这个子shell在5分钟之后被另一个shell进程指示杀死它的父进程。 然后用less打开文件。 当backround shell命令杀死父子shell时,它会杀死所有的子项,包括“less”命令。 然后循环再次开始该过程。
我知道杀死这个的唯一简单方法是杀死你的原始shell的terminal。如果这是不可接受的,你可以使用“killfile”技巧:
touch killfile while [ -f killfile]; do stuff; done
要停止做的stuff ,在另一个shell中的killfile。
你可以在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没有编译客户端服务器function,这当然不起作用。 inoifywait将停止工作。 所以我希望你的文件被覆盖。 当然,也可以解决这个问题。 如果你想有一个更less像样的经验,你可以使用lessmacros来获得vim less键绑定。
/usr/share/vim/vim73/macros/less.sh --servername refresh_session
我发现了一个旧的,但非常好的“less”像程序(“传呼机”)。 它有一个“R”命令刷新文件。
它被称为“lv” ,你可以使用下面的命令在Ubuntu上安装它:
sudo apt install lv
不过,它似乎没有自动加载function。
你可以试试这个命令:tail -f file
尾巴是你的朋友。 “tail -f filename”会在显示时显示新行。
或者,如果您正在寻找在文件中间进行的更改,可能每隔几分钟运行一次脚本,将该文件复制到一个临时位置并对其进行比较?