文章目录
{ .ImgAlt }}

在将命令输出转到文件或者另外一个命令的时候,你可能会注意到错误提示打印在屏幕上。

在 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&>

腾讯云:新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。



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

微信:

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

QQ: 3217680847

QQ 群: 82695646 雪梦科技交流群

原文 :https://linuxize.com/post/bash-redirect-stderr-stdout/

    版权声明:本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。知识共享许可协议
腾讯云:新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。

相关推荐