从 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 所能做的所有事情,甚至更多,包括显示输出。