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


10

使用任何一个都可以阅读文本。但是只有使用stderr重定向,才能滚动或键入/ somepattern并获得匹配项。

没有它,搜索将给出“没有要搜索的内容(按RETURN)”和〜的列。

既然,stderr和stdout是不一样的,但是为什么直到我开始用更少的东西做完之后,为什么stderr和stdout却不显示它们相同?

这也许是一些我不理解的奇怪的多窗口vim东西。有什么想法吗?

Answers:


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

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

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

以及睡眠时间的变化,以便somecommand在准备好之前或之后产生输出,并观察关闭管道时会发生什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.