我经常会遇到在 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