是否less
有一个命令可以从磁盘重新加载文件,以便 less 可以显示自 less 启动以来对文件所做的任何更改?less
如果我想查看正在查看的文件的更改,这将节省我终止并重新启动的时间。
答案1
手册中详细介绍了两个可能相关的命令less(1)
R Repaint the screen, discarding any buffered input. Useful if
the file is changing while it is being viewed.
F Scroll forward, and keep trying to read when the end of file is
reached. Normally this command would be used when already at
the end of the file. It is a way to monitor the tail of a file
which is growing while it is being viewed. (The behavior is
similar to the "tail -f" command.)
答案2
R
因为 repaint 并不总是重新加载文件。[1]
一个总是重新加载文件的解决方法是按hq
,这将打开帮助页面,然后退出。它有强制重新加载文件的副作用。
R
[1] 以下是一些可以重新加载和不可以重新加载的情况:
>
和>>
变化:请重新加载sed -i
、gEdit、TextEdit:不要重新加载- 在 Linux 上,
vi
更改:重新加载 - 在 Mac 上,
vi
更改:不会重新加载
我认为差异在于 inode 是否发生变化(您可以使用 进行检查ls -i foo.txt
)。如果 inode 发生变化,则将R
不起作用。
答案3
less
我使用退出时自动重新加载的 shell 脚本解决了这个问题:
while true; do less -K file.txt || exit; done
使用此脚本,我可以点击q
重新加载文件,并CTRL+C
退出并返回 bash shell。此CTRL+C
行为通过-K
选项。您的上一个搜索词将被保留。
可以通过使用冒号 ( :
) 创建空表达式来进一步重构,通过do :
...
while less -K file.txt; do : ; done
缺点
当前观看位置将始终停留在第 0 行。
实际使用示例mintty
在我的 Windows(GitBash)环境中,我设置了一个脚本,用于打开一个新的终端窗口(mintty)以查看文件:
lesswin() { mintty bash -c "while less -K \"$@\"; do : ; done;" & }