Answers:
+--------------------+ +------+ +----------+
| stdout |·······→| less |——————→| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————→| |
+--------------------+ +----------+
如果somecommand
打印文本标准错误而已,那么当您运行somecommand | less
,somecommand
并且less
都显示到终端。命令在其stderr上的输出不会转到less
,而是直接转到终端,因为它没有被重定向。首先,somecommand
滚动滚动输出,而less则初始化并显示其提示行;然后,当somecommand
完成较少时,注意其输入已完成(因为管道已关闭)。您可能需要尝试一下:运行
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
以及睡眠时间的变化,以便somecommand
在准备好之前或之后产生输出,并观察关闭管道时会发生什么。