使用其中任何一种都可以得到可读的文本。但只有使用 stderr 重定向才能滚动或输入 /somepattern 并获得匹配。
如果没有它,搜索会给出“无内容可搜索(按 RETURN)”和一列〜。
鉴于,stderr 和 stdout 不一样,但是为什么 less 显示它们相同,直到我开始用 less 做一些事情?
这可能是一些我不明白的奇怪的多窗口 vim 的东西。想法?
答案1
+--------------------+ +------+ +----------+
| stdout |·······→| less |——————→| |
| somecommand | +------+ | terminal |
| stderr |——————————————————————→| |
+--------------------+ +----------+
如果somecommand
仅将文本打印到标准错误,则当您运行 时somecommand | less
,somecommand
和less
都会显示到终端。该命令在其 stderr 上的输出不会less
,而是直接输出到终端,因为它没有被重定向。首先somecommand
,当 less 初始化时,输出滚动并显示其提示行;然后当完成时,somecommand
less 注意到它的输入已完成(因为管道已关闭)。您可能想尝试一下:运行
{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }
以及睡眠时间的变化,以便somecommand
在较少的准备就绪之前或之后产生输出,并查看管道关闭时会发生什么。