Linux 更少的行为和标准错误

hae*_*lix 13 stderr less

我正在用 看我复杂命令的输出less,问题是stderr丢失了。stderr行通常会stdoutless. 我希望它们被打印到控制台,当我退出时less,可以一起看到它们。

我知道有可能是没有解决这个,我读到teemultitee,但至今没有运气。

Som*_*ude 19

你必须重定向stderrstdout

$ ./somecommad 2>&1 | less
Run Code Online (Sandbox Code Playgroud)

检查您的外壳手册(例如man bash。)

  • 对这个老问题的新读者的评论(尤其不是约阿希姆)这是每个人第一次浏览这个问题时的想法。但问题更微妙 - 请参阅[dmckee的回答](http://superuser.com/a/366615/52492)之后评论中的讨论 (2认同)
  • **2>&1** 的简写是 **|&**。因此,它可以简化为“$ ./somecommad |& less” (2认同)

Red*_*ick 11

也许

command 2> command.err | less; cat command.err; rm command.err
Run Code Online (Sandbox Code Playgroud)

附录

下面是对那些忽略仔细阅读问题和没有阅读上述 OP 澄清评论的人的澄清。

海利克斯指出:

stderr 行通常列在 less 内的 stdout 行之间

并且,在对早期回答者的评论中,写道:

你告诉我如何将 stderr 重定向到 stdout 但这不是我想要的。我不希望 stderr 在 less 内与 stdout 混合。当我退出较少时,我希望 stderr 在终端中

问题可能是特定于平台的,这肯定是我在较旧的 Unix SVR4 平台上遇到的问题。

如果,在这样的平台上,你做类似的事情

 find / ... | less
Run Code Online (Sandbox Code Playgroud)

任何错误消息(例如目录权限)在 less 中显示如下

 stdout line 1
 stdout line 2
 error message text
 stdout line 4
Run Code Online (Sandbox Code Playgroud)

以便输出行被错误消息遮挡。

如果刷新页面,输出行会正确显示,但会丢失错误消息。当您退出时,除了命令提示符外,屏幕将被清除。

如果你做类似的事情

  find / ... 2>&1 | less
Run Code Online (Sandbox Code Playgroud)

错误消息与标准输出混合在一起。再次退出时,屏幕为空。

如果你想先在less中只细读标准输出,然后在less退出后看到错误信息,你需要一个不同的解决方案。

这就是我在最初的两行答案中暂时建议的内容。

  • @VanillaFace:我在回答中添加了一些澄清材料。 (3认同)