javanix Asked: 2010-11-09 06:20:21 +0800 CST2010-11-09 06:20:21 +0800 CST 2010-11-09 06:20:21 +0800 CST 在 bash 脚本中输出到 /dev/null 完成了什么?[复制] 772 我经常遇到在 if 语句中使用这种语法的小型 bash 脚本: some command > /dev/null 2>&1 输出到/dev/null这样的目的是什么,是什么2>&1意思? 它似乎总是有效,但我想知道它在做什么。 scripts command-line bash redirect 2 个回答 Voted Best Answer João Pinto 2010-11-09T06:31:15+08:002010-11-09T06:31:15+08:00 >/dev/null将命令标准输出重定向到空设备,这是一个丢弃写入它的信息的特殊设备 2>&1将标准错误流重定向到标准输出流(stderr = 2,stdout = 1)。请注意,这需要标准错误流并将其指向与当时标准输出相同的位置。这就是订单的原因,因为如果想要最终合并两个流,则>/some/where 2>&1需要先将 stdout 指向某个位置,然后将 stderr 指向同一位置。 实际上,它会阻止显示命令(stdout 和 stderr)的任何输出。当您不关心命令输出时使用它。 Sid 2010-11-09T06:59:42+08:002010-11-09T06:59:42+08:00 STDIN 用 0 表示,STDOUT 用 1 表示,STDERR 用 2 表示。 /dev/null是 bit-bucket:你倾倒任何你不需要的东西的地方。 因此,STDOUT 被重定向到位桶(垃圾),而 STDERR 被重定向到 STDOUT 所在的位置:位桶。 你也可以这样做: >/dev/null 2>/dev/null
>/dev/null
将命令标准输出重定向到空设备,这是一个丢弃写入它的信息的特殊设备2>&1
将标准错误流重定向到标准输出流(stderr = 2,stdout = 1)。请注意,这需要标准错误流并将其指向与当时标准输出相同的位置。这就是订单的原因,因为如果想要最终合并两个流,则>/some/where 2>&1
需要先将 stdout 指向某个位置,然后将 stderr 指向同一位置。实际上,它会阻止显示命令(stdout 和 stderr)的任何输出。当您不关心命令输出时使用它。
STDIN 用 0 表示,STDOUT 用 1 表示,STDERR 用 2 表示。
/dev/null是 bit-bucket:你倾倒任何你不需要的东西的地方。
因此,STDOUT 被重定向到位桶(垃圾),而 STDERR 被重定向到 STDOUT 所在的位置:位桶。
你也可以这样做: