更less像“更新文件”一样的function

我想观看一个文件,每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”会在显示时显示新行。

或者,如果您正在寻找在文件中间进行的更改,可能每隔几分钟运行一次脚本,将该文件复制到一个临时位置并对其进行比较?