【shell】1>/dev/null 2>&1 详解

今天看别人的shell脚本,里面用到了【1>/dev/null 2>&1】,这个是我之前没有用过的,于是学习了博友的一篇文章:https://www.cnblogs.com/xingmeng/archive/2013/08/12/3252390.html

以下自己稍做整理,方便自己记忆和复习。

先将此命令组合进行拆解为如下2个部分(一长串的命令看起来会很懵,拆解后进行理解就很容易啦。我刚开始学习shell的时候,就习惯拿着别人的命令去拆解,然后弄明白每个字符的意思,这种方式真的很有效):

1)1>/dev/null:

  1,指stdout标准输出,系统默认值是1;

  >,指重定向;

  /dev/null,指控设备文件。

  所以,此部分的执行结果是:将标准输出的内容写入空设备文件(其实就是不想记录输出的日志),若需要记录,则将/dev/null替换为日志文件的名称即可。

2)2>&1:

  2,指stderr标准错误;

  &,是“等同于”的意思;

  1,即stdout

  所以,此部分的执行结果是:将标准错误stderr的内容写入标准输出stdout。而我们的前段命令将stdout的结果输出到了空设备文件,因此,stderr的内容最终也是输出到了空设备文件。

【小疑问】

为什么不用【1>/dev/null 2>/dev/null】来代替以上写法呢?

答:用写法2的话,则stdout和stderr都打开了同一个文件/dev/null,stdout和stderr会互相覆盖。而写法1,是将stderr先送往stdout,/dev/null仅被stdout打开,所有stdout的内容(包括stderr送过来的)统一由stdout送往/dev/null。

原文地址:https://www.cnblogs.com/jona-test/p/11475417.html