具有“更新文件”等功能

具有“更新文件”等功能

我想查看每 5 分钟被覆盖一次的文件less。我怎样才能让less遵循新的文件描述符而不是保持显示旧的?watch "cat file"不会这样做,因为文件太长,无法在一个终端窗口中容纳。

答案1

您可以在查看 中的文件时发出F命令 ( ) 来实现此效果。要停止跟踪并切换回分页,请按Shift+FlessCtrl+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

要停止执行stuffrm请在另一个 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

但是,它似乎没有自动重新加载功能。

相关内容