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

 some command > /dev/null 2>&1 


这样输出到/dev/null的目的是什么,而2>&1的含义是什么? >

评论

不知道为什么这个问题被标记为骗子,它显然已经开放了3年,甚至还没有发布。

穆鲁已经赢得了胜利,尽管时不时地处于失败的判断中,但我相信他会结束这个问题,即使您说的是大三岁也是如此。我既没有阅读问题也没有阅读答案,但我认为他的判断是基于这样的事实,那就是另一个答案更好。巧合的是,我刚刚实现了:“ bash -c“ echo $ IntBrightness | sudo tee $ backlight”> / dev / null`可以抑制不必要的终端输出。您可以使用mod进行标记,并要求将所有的重复候选答案都合并到此问答中。似乎需要做很多工作...

我只是注意到您是OP,而不是路人。我已经审查了常见问题解答,并投票希望重新提出您的问题。我认为您的浏览器更通用,并且适合我今晚的需求(根据夜间或白天的亮度水平消除屏幕上的650或3000回声。而另一个问题严格地是关于错误消息(文件描述符2> / dev / null),一个臭名昭著的例子是Zenity和Yad中的Gtk瞬态父级,它们使用Dialog Windows而不是完整窗口。 null

#1 楼

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

2>&1将标准错误流重定向到标准输出流(stderr = 2,stdout = 1 )。请注意,这将采用标准错误流,并将其指向与标准输出相同的位置。这就是订购>/some/where 2>&1的原因,因为如果要在最后合并两个流,则需要先将stdout指向某个位置,然后将stderr指向相同的位置。

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

评论


那&在1之前在2>&1中表示什么

–没人
17年6月27日在23:46

@Nobody“&表示其后是文件描述符而不是文件名。” stackoverflow.com/a/818284/5948237

– Vivek Chavda
17年9月19日在18:41

@VivekChavda 2(stderr)为何不需要这种区别?

–迪安树脂
18/12/2在5:54

我只是从链接的答案中复制而已,我本人对此并不熟悉。这是该答案下的评论:stackoverflow.com/questions/818255/…

– Vivek Chavda
18/12/3在21:07

最后两个句子(“实际上,它防止显示命令(stdout和stderr)的任何输出。当您不在乎命令输出时使用。”)应加粗。最后,这是一条非常重要的信息。我希望它能突出更多。

–加百利·斯台普斯
19年2月7日在22:24



#2 楼

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

/ dev / null是位存储桶:在其中转储不需要的任何内容。


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


您也可以执行以下操作:

>/dev/null 2>/dev/null


评论


很好的解释。我也认为上面有一个快捷方式:&> / dev / null

–芯片城堡
13年8月1日在20:48



快捷方式&>和>&有点烦人,因为它们是“ bashism”-它们确实可以与bash shell一起使用,但与某些其他POSIX兼容shell不兼容。 > ... 2>&1 ...语法可在每个POSIX兼容shell中使用。

– Mikko Rantalainen
'18 Sep 11'在6:05