如何在Bash中把stderr重定向到stdout?
当把一个命令的输出重定向到一个文件或用管道输送到另一个命令时,你可能会注意到错误信息会被打印在屏幕上。
在Bash和其他Linux shells中,当一个程序被执行时,它使用三个标准的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
被重定向到file
之前就被重定向到stdout
。
command 2>&1 > file
另一种将stderr
重定向到stdout
的方法是使用&>
结构。在Bash中,&>
的含义与2>&1
相同。
command &> file
总结
在命令行上工作时,理解重定向和文件描述符的概念是非常重要的。
要想重定向stderr
和stdout
,请使用2>&1
或&>
结构。
如果你有任何问题或反馈意见,请随时留言。