1 | command > /dev/null 2>&1 |
要想理解这段代码,必须先理解 文件描述符
,和 输出重定向
。
文件描述符
每开启一个 linux(unix) 应用程序(daemon 除外),默认会打开三个输入输出流。即
stdin (标准输入, 文件描述符 0), stdout(标准输出, 文件描述符1),
stderr(标准错误, 文件描述符 2)。
上面的 2 、1 就是标准错误和标准输出。
注意:默认不填表示标准输出。
输出重定向
在示例中, >
表示重定向。里面有两个重定向。
注意:
>>
表示追加重定向
command > /dev/null
。 /dev/null 是一个黑洞,任何你想丢弃的东西都可以重定向
到这里。这个代码片段的意思是将 command 命令产生的标准输出丢弃掉。由上文我们可以
知道, 标准输出是可以不填的。2>&1
。 这里表示将标准错误(2)输出重定向到标准输出(1)的输出上。此处的&
表示跟指针的概念类似。由于标准输出(1)已经被重定向到 /dev/null,2 也被重定
向到了 /dev/null。
也就是说这里丢弃了所有的输出和错误,让程序安静的运行。
如果想让程序在后台运行,可以加个在末尾加一个 &
:
1 | command > /dev/null 2>$1 & |