在 Bash 中如何将标准错误stderr转向标准输出stdout


在将命令输出转到文件或者另外一个命令的时候,你可能会注意到错误提示打印在屏幕上。
在 Bash 和其他 Linux shells 中,当程序执行时,它使用三个标准的 I/O 流。每一个流由一个数字文件描述符表示:
0
-stdin
,标准输入1
-stdout
,标准输出2
-stderr
,标准错误
一个文件描述符就是一个数字,代表一个打开的文件。
输入流提供信息给程序,通常是由键盘输入的信息。
程序输出通常到标准输出流,而错误消息通常到标准错误流。默认情况下,输入流和错误流都打印在屏幕上。
二、输出转向
转向就是将程序输出,发送到另外一个程序或者文件。
流可以使用n>
操作符进行转向,其中n
就是文件描述符数字。
当n
没有写时,默认是1
,标准输出流。例如,下面两个命令是一样的,都将命令输出转向到文件。
command > file
command 1> file
将标准错误转向,使用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
是使用&>
。在 Bash 中 &>
和2>&1
一个意思:
command &> file
四、总结
在使用命令行的时候,理解转向和文件描述符的概念是非常重要的。
想要将标准错误stderr
转向标准输出stdout
,使用2>&1
和&>
。

如果你有任何疑问,请通过以下方式联系我们:
微信:

微信群: 加上面的微信,备注微信群
QQ: 3217680847

原文 :https://linuxize.com/post/bash-redirect-stderr-stdout/
版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
