command > /dev/null 2>&1 表示什么意思?

1
command > /dev/null 2>&1

要想理解这段代码,必须先理解 文件描述符,和 输出重定向

文件描述符

每开启一个 linux(unix) 应用程序(daemon 除外),默认会打开三个输入输出流。即
stdin (标准输入, 文件描述符 0), stdout(标准输出, 文件描述符1),
stderr(标准错误, 文件描述符 2)。

上面的 2 、1 就是标准错误和标准输出。

注意:默认不填表示标准输出。

输出重定向

在示例中, > 表示重定向。里面有两个重定向。

注意:>> 表示追加重定向

  1. command > /dev/null。 /dev/null 是一个黑洞,任何你想丢弃的东西都可以重定向
    到这里。这个代码片段的意思是将 command 命令产生的标准输出丢弃掉。由上文我们可以
    知道, 标准输出是可以不填的。

  2. 2>&1。 这里表示将标准错误(2)输出重定向到标准输出(1)的输出上。此处的
    & 表示跟指针的概念类似。由于标准输出(1)已经被重定向到 /dev/null,2 也被重定
    向到了 /dev/null。

也就是说这里丢弃了所有的输出和错误,让程序安静的运行。

如果想让程序在后台运行,可以加个在末尾加一个 &:

1
command > /dev/null 2>$1 &