+--------------------+ +------+ +----------+
| stdout |·······?| less |——————?| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————?| |
+--------------------+ +----------+
Run Code Online (Sandbox Code Playgroud)
如果somecommand仅将文本打印到标准错误,那么当您运行somecommand | less,somecommand和less都显示到终端。该命令在其 stderr 上的输出不会less直接发送到终端,因为它没有被重定向。首先somecommandscrolls by while less的输出初始化并显示其提示行;然后当somecommand完成时较少注意到其输入已完成(因为管道已关闭)。您可能想尝试一下:运行
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
Run Code Online (Sandbox Code Playgroud)
以及睡眠时间的变化,以便somecommand在 less 准备好之前或之后产生输出,并查看管道关闭时会发生什么。