`docker 日志 foo | less` 不可搜索或滚动,但 `docker logs foo 2>&1 |少`是

`docker 日志 foo | less` 不可搜索或滚动,但 `docker logs foo 2>&1 |少`是

使用其中任何一种都可以得到可读的文本。但只有使用 stderr 重定向才能滚动或输入 /somepattern 并获得匹配。

如果没有它,搜索会给出“无内容可搜索(按 RETURN)”和一列〜。

鉴于,stderr 和 stdout 不一样,但是为什么 less 显示它们相同,直到我开始用 less 做一些事情?

这可能是一些我不明白的奇怪的多窗口 vim 的东西。想法?

答案1

+--------------------+        +------+       +----------+
|             stdout |·······→| less |——————→|          |
| somecommand        |        +------+       | terminal |
|             stderr |——————————————————————→|          |
+--------------------+                       +----------+

如果somecommand仅将文本打印到标准错误,则当您运行 时somecommand | lesssomecommandless都会显示到终端。该命令在其 stderr 上的输出不会less,而是直接输出到终端,因为它没有被重定向。首先somecommand,当 less 初始化时,输出滚动并显示其提示行;然后当完成时,somecommandless 注意到它的输入已完成(因为管道已关闭)。您可能想尝试一下:运行

{ sleep 1; somecommand; sleep 1; } | { sleep 0; less; }

以及睡眠时间的变化,以便somecommand在较少的准备就绪之前或之后产生输出,并查看管道关闭时会发生什么。

相关内容