我喜欢less
,我可以使用它通过+F
标志(或ShiftF热键)跟踪日志、向前和向后搜索,并且通常在文档中自由移动。
但是 中缺少一件事less
:通常我在文件末尾,我想看到新的事情发生。tail -f
我只需点击enter几次,新的日志行就会与旧行明显分开。
可以将其添加到 吗less
? 怎样添加?
答案1
这实际上不是tail
的行为——而是终端的行为。Tail 只是将输出流发送到 stdout,然后发送到您的终端,然后您通过按 Enter 在该输出中间插入空行。Tail 本身实际上根本不接受您的输入。您可以输入任何其他内容,它们也会显示出来。
less
但是,它是一个控制台应用程序,它接受输入并对其进行处理。它使用终端控制序列来管理控制台,这就是您可以滚动的方式。让您在流中插入任意字符会弄乱显示,而且 less 无论如何都会使用您的输入来控制程序。
不幸的是,它似乎没有办法直观地标记当前位置。不过,这并不是一个糟糕的功能请求,而且做仍会不时获得新功能。
答案2
我在为自己寻找同样的答案时发现了您的问题。
对被接受的答案感到失望,我想出了一个解决方法。虽然不太理想,但它允许我在跟踪的日志中标记我的位置less
,这就是重点所在。
我创建了一个小型可执行脚本(我称之为marklog
),其中包含以下内容,并将其放在我的路径中:
#!/bin/sh
echo >> $1
echo >> $1
echo >> $1
echo `date` ---------------------------------------------------------------------- >> $1
echo >> $1
echo >> $1
当然,这只有在您拥有日志文件的写入权限时才有效——这在许多情况下可能会成为交易障碍。我还创建了这个版本,我用它来写入不属于我的日志文件(但我有 sudo 访问权限):
#!/bin/sh
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo `date` ------------------------------------------------------------------------- >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
这些脚本正好提供了我所寻找的那种视觉突破。至少有 3 种方法可以使用它们:
在使用时,您通常会按几次回车键
tail -f
,而是从另一个终端运行marklog
(提供日志文件的路径作为参数)。使用CtrlZ暂停
less
,这样您就可以在同一个终端窗口中运行脚本,但是当您重新前台显示less
(fg
当然使用)时,它将不再处于“跟随”模式,因此您需要ShiftF再次点击...最后——这可能是最方便的方法,因为您不需要输入日志文件的路径:通过键入
marklog
直接从运行。将用 替换当前文件名。但是,在“跟随”模式下不会响应 !,因此您必须先点击 退出跟随模式,然后运行 ,再一次。less
!marklog %
Less
%
less
CtrlC!marklog %
ShiftF
使用方法 3,您还可以获得 Less 的命令历史记录的额外好处:只需点击!
,然后使用向上箭头选择最近的命令(对我来说,它始终是marklog
)。
希望这对其他人也有帮助,就像对我有帮助一样。
答案3
在文件末尾按下Shift+ ,less 将开始工作。Ftail -f
答案4
Lambart 的回答让我找到了我最喜欢的解决方案。感谢 Lambart!
只需输入跟随模式ctrlc并输入!printf "\n\n---$(date)---\n\n" >> %
。之后您必须再按enter一次并点击shiftf才能再次开始跟随文件。