如何在Bash中将stderr重定向到stdout
将命令的输出重定向到文件或将其通过管道传递到另一个命令时,您可能会注意到错误消息显示在屏幕上。
在Bash和其他Linux Shell中,执行程序时,它使用三个标准I / O流。 每个流都由一个数字文件描述符表示:
0
—stdin
,标准输入流。1
—stdout
,标准输出流。2
—stderr
,标准错误流。
文件描述符只是代表打开文件的数字。
输入流通常通过键入键盘为程序提供信息。
程序输出进入标准输入流,错误消息进入标准错误流。 默认情况下,输入流和错误流都打印在屏幕上。
重定向输出#
重定向是一种捕获程序输出并将其作为输入发送到另一个程序或文件的方法。
可以使用 n>
操作员,在哪里 n
是文件描述符号。
什么时候 n
被省略,默认为 1
,标准输出流。 例如,以下两个命令是相同的; 两者都会重定向命令输出(stdout
)到文件中。
command > file
command 1> file
重定向标准错误(stderr
) 使用 2>
操作员:
command 2> file
您可以同时写 stderr
和 stdout
到两个单独的文件:
command 2> error.txt 1> output.txt
要阻止错误消息显示在屏幕上,请重定向 stderr
至 /dev/null
:
command 2> /dev/null
重新导向 stderr
至 stdout
#
将程序的输出保存到文件中时,重定向是很常见的 stderr
至 stdout
这样您就可以将所有内容保存在一个文件中。
重定向 stderr
至 stdout
并将错误消息发送到与标准输出相同的文件,请使用以下命令:
command > file 2>&1
> file
重定向 stdout
至 file
和 2>&1
重定向 stderr
到的当前位置 stdout
。
重定向的顺序很重要。 例如,以下示例仅重定向 stdout
至 file
。 发生这种情况是因为 stderr
重定向到 stdout
之前 stdout
被重定向到 file
。
command 2>&1 > file
重定向的另一种方法 stderr
至 stdout
是使用 &>
构造。 在重击中 &>
与…具有相同的含义 2>&1
:
command &> file
结论#
在命令行上工作时,了解重定向和文件描述符的概念非常重要。
重定向 stderr
和 stdout
, 使用 2>&1
要么 &>
结构体。
如果您有任何疑问或反馈,请随时发表评论。
bash终端