如何在Bash中将stderr重定向到stdout

将命令的输出重定向到文件或将其通过管道传递到另一个命令时,您可能会注意到错误消息显示在屏幕上。

在Bash和其他Linux Shell中,执行程序时,它使用三个标准I / O流。 每个流都由一个数字文件描述符表示:

  • 0stdin,标准输入流。
  • 1stdout,标准输出流。
  • 2stderr,标准错误流。

文件描述符只是代表打开文件的数字。

输入流通常通过键入键盘为程序提供信息。

程序输出进入标准输入流,错误消息进入标准错误流。 默认情况下,输入流和错误流都打印在屏幕上。

重定向输出#

重定向是一种捕获程序输出并将其作为输入发送到另一个程序或文件的方法。

可以使用 n> 操作员,在哪里 n 是文件描述符号。

什么时候 n 被省略,默认为 1,标准输出流。 例如,以下两个命令是相同的; 两者都会重定向命令输出(stdout)到文件中。

command > file
command 1> file

重定向标准错误(stderr) 使用 2> 操作员:

command 2> file

您可以同时写 stderrstdout 到两个单独的文件:

command 2> error.txt 1> output.txt

要阻止错误消息显示在屏幕上,请重定向 stderr/dev/null

command 2> /dev/null

重新导向 stderrstdout

将程序的输出保存到文件中时,重定向是很常见的 stderrstdout 这样您就可以将所有内容保存在一个文件中。

重定向 stderrstdout 并将错误消息发送到与标准输出相同的文件,请使用以下命令:

command > file 2>&1

> file 重定向 stdoutfile2>&1 重定向 stderr 到的当前位置 stdout

重定向的顺序很重要。 例如,以下示例仅重定向 stdoutfile。 发生这种情况是因为 stderr 重定向到 stdout 之前 stdout 被重定向到 file

command 2>&1 > file 

重定向的另一种方法 stderrstdout 是使用 &> 构造。 在重击中 &> 与…具有相同的含义 2>&1

command &> file

结论#

在命令行上工作时,了解重定向和文件描述符的概念非常重要。

重定向 stderrstdout, 使用 2>&1 要么 &> 结构体。

如果您有任何疑问或反馈,请随时发表评论。

bash终端

Sidebar