有没有办法动态刷新 less 命令?

Zai*_*aid 164 less watch

我喜欢这个watch命令,但它有它的局限性

我很想知道我是否可以模仿watchwith的功能less。我主要是寻找滚动浏览我的目录的能力,因为它通过运行脚本动态修改。

Gil*_*il' 148

在 中less,您可以键入F( Shift+ F) 以在文件末尾继续阅读(如tail -f);您可以输入:e一个文件名来查看不同的文件,但不幸的是,如果您输入当前文件的名称,less则不会重新加载该文件。但是,有一个技巧可以让它重新读取当前文件,由sabgenton建议:键入:e并输入一个不存在的文件的名称;这会导致 less 显示错误消息,然后重新加载当前文件。

如果您正在寻找 的替代品watch ls,这里有一些:

  • 现代文件管理器(例如 Nautilus、Thunar、Konqueror、Dolphin、Finder)实时刷新视图。
  • Emacs 没有实时刷新,但使用auto-revert-mode,它将每 5 秒重新加载文件或目录(延迟可配置)。
  • 虽然 w3m 主要是一个网络浏览器,但它是一个可通过的目录和文本文件查看器。按R重新加载(本地)URL。

  • 对我来说:e randomnamejkdlfjldf 无法加载不存在的文件名,然后重新加载回当前文件:D (11认同)
  • @PaulWagland 不,`R` 不能可靠地刷新文件。它刷新屏幕,并擦除一些输入缓冲区,但实际上并没有在所有情况下从文件中重新加载数据(仅当文件很大时?我没有深入研究代码)。 (4认同)
  • @CMCDragonkai 不,`less +F` 只监视附加内容。使用 `:e nonexistentfile` 重新读取完全改变的输入。 (2认同)
  • 我希望每次我忘记这件事并再次回到这里时,我都能给你一个 +1。:D (2认同)

bal*_*lki 74

Shift+F将使less类似于tailf. 也就是说,如果将更多数据附加到文件中,它就会刷新。

  • 请注意,这*仅*适用于追加。如果行被删除或就地编辑,`less` 将不会显示这些更改。 (13认同)
  • <kbd>Ctrl+C</kbd> (3认同)
  • 如何停止跟随模式并重新进入滚动模式? (2认同)
  • balki 我的经验是,如果您正在使用`$COMMAND |,这会杀死管道数据的命令。少`。我想知道是否有一个很好的方法来解决这个问题?你可以做类似`$COMMAND > /tmp/file & less /tmp/file` 的事情,但这不是很好。 (2认同)

小智 47

只需键入:

less +F filename
Run Code Online (Sandbox Code Playgroud)

这模拟在编辑器中按“F”。

  • 谢谢; 将别名 `alias check="less +F"` 添加到我的 `.bashrc` 中。 (3认同)

小智 27

man页面可以提供非常丰富的信息。不要被他们吓倒。除其他外,man less说您可以使用该R命令:

   R      Repaint the screen, discarding any buffered input.  Useful if the file is changing while it is being viewed.
Run Code Online (Sandbox Code Playgroud)

(我意识到这个问题已经超过 6 年了,但它出现在谷歌搜索中,所以我不是唯一一个点击链接到达这里的人。)

  • 这会重新绘制屏幕,​​以防它被另一个程序的输出中断。它不会始终如一地重新加载文件。我没有深入研究代码以了解它的作用,实验性的短文件不会重新加载。我绝对不会被手册页吓倒,我说这个描述措辞不当:“重绘”并没有表示输入被重新读取,并且实际行为不太适合“如果文件正在更改则有用”(也许这是一个bug?我不知道,因为我不知道该命令应该做什么)。 (11认同)
  • `R` 并不总是有效。见 https://unix.stackexchange.com/questions/4351/is-there-a-way-to-dynamically-refresh-the-less-command/445633#445633 (3认同)
  • 伟大的!对我来说,它适用于短文件和长文件。我刚刚注意到两个可能的问题: 1. `less` 没有使用它的文件名重新打开文件 - 即当文件的 inode 改变时(比如使用 `mv` 覆盖文件)然后旧文件内容保留(可能是旧的) inode 被重新读取)--- 2. 显示的第一行可能从与原始文件内容相同的字节偏移量开始。因此,当线条长度改变时,第一条显示的线条可能不完整,并且显示的线条可能向上/向下移动。 (2认同)

wis*_*cky 10

R重绘并不总是重新加载文件。[1]

始终重新加载文件的解决方法是按hq,这将打开帮助页面,然后退出。它具有强制重新加载文件的副作用。


[1] 以下是一些R可以重新加载和不重新加载的情况示例:

  • >>>变化:重新加载
  • sed -i, gEdit, TextEdit: 不要重新加载
  • 在 Linux 上,vi更改:要重新加载
  • 在 Mac 上,vi更改:不要重新加载

我相信差异归结为 inode 是否更改(您可以使用 进行检查ls -i foo.txt)。如果 inode 发生变化,R则将不起作用。


jor*_*orb 6

我通常只输入一次G以尾随输出。我发现它对像 CIFS 这样的网络文件系统特别有用。

  • 顺便说一句,你所谓的“一次性基础”是什么?`less` 的维护者 Mark Nudelman 回答如下:“G 命令通常不会像 R 命令那样强制重新读取文件。如果文件的结尾尚未被读取,它似乎会这样做调用G时读取,这样跳​​转到文件末尾必须第一次读取那里的数据。例如,如果你用G跳转到末尾,然后用1G跳转回开头,然后另一个程序修改文件末尾的数据(不改变长度),“(续) (2认同)

Dav*_*ngs 5

运行时的“F”键less将执行类似于 的“跟随” tail -f,但我不确定这是否会实现您在此处寻找的内容。