在 bash 脚本中输出到 /dev/null 有什么作用?

在 bash 脚本中输出到 /dev/null 有什么作用?

我经常会遇到在 if 语句中使用这种语法的小型 bash 脚本:

some command > /dev/null 2>&1

那样输出的目的是什么/dev/null,是什么2>&1意思?

它似乎总是有效,但我想知道它在做什么。

答案1

>/dev/null将命令标准输出重定向到空设备,这是一个特殊的设备,它会丢弃写入其中的信息

2>&1将标准错误流重定向到标准输出流(stderr = 2,stdout = 1)。请注意,这会获取标准错误流并将其指向与当时的标准输出相同的位置。这就是顺序的原因,>/some/where 2>&1因为需要先将 stdout 指向某个位置,然后然后如果最终想要合并两个流,请将 stderr 指向同一位置。

实际上,它会阻止显示命令的任何输出(stdout 和 stderr)。当您不关心命令输出时,可以使用它。

答案2

STDIN 用 0 表示,STDOUT 用 1 表示,STDERR 用 2 表示。

/dev/null是位桶:您可以将其存放不需要的任何东西的地方。


因此,STDOUT 被重定向到位桶(垃圾桶),而 STDERR 被重定向到 STDOUT 所在的位置:位桶。


您还可以执行以下操作:

>/dev/null 2>/dev/null

相关内容