我怎样才能强制 less 停止逐行缓冲其输入?

我怎样才能强制 less 停止逐行缓冲其输入?

从 stdin 读取时,less在读取整行之前不显示任何输出。

我使用一个在一行上打印进度的脚本,而不打印换行符,而且我真的希望能够看到这一进度,即使我将其通过管道传输到less.

这是一些示例 bash 代码来演示我的问题:

while true ; do echo -n zzz ; sleep 1s ; done | less

是否有一个按钮可以让我按下来强制less显示其收集的输入,或者是否有一个选项可以禁用这种缓冲?

答案1

我认为这是不可能的。

您可以改为过滤输入以插入换行符。这是一个非常简单的过滤器,它不关心换行符的位置;绝对可以对此进行改进,但至少您会近乎实时地看到输出。

perl -e '$| = 1; while (sysread STDIN, $_, 80) {print; /\n/ or print "\n"}

或者,您可以切换到另一个查看器。如果您不使用 Emacs,Emacs 的 shell 模式是一个重量级解决方案。您将在*shell*缓冲区(使用 创建)中运行脚本M-x shell。除了不同的界面之外,它还可以完成 less 所能做的所有事情,甚至更多,包括显示输出。

相关内容