2> / dev / null是什么意思?


Answers:


346

>运算符通常将输出重定向到文件,但也可以重定向到设备。您也可以使用>>进行追加。

如果您未指定数字,则假定使用标准输出流,但是您也可以重定向错误

> file将stdout重定向到文件
1> file将stdout重定向到文件
2> file将stderr重定向到文件
&> file将stdout和stderr重定向到文件

/dev/null是空设备,它将接受您想要的任何输入并将其丢弃。它可以用来抑制任何输出。


6
> /dev/null 2>&1和之间有区别&> /dev/null
亚历山大·米尔斯

13
在今天的实践中,我认为没有2>&1一种较旧的语法,因此&>几年前就不会使用,但是两者是等效的。
沃伦·希尔

28

简而言之,它将重定向stderr(fd 2)到黑洞(丢弃命令的输出)。

一些更常见的重定向用例:

command > /dev/null 2>&1 &

command在后台运行,丢弃stdoutstderr

command >> /path/to/log 2>&1 &

运行command并将stdout和stderr附加到日志文件。

在Bash 4+中,可以使用较短(但可读性较差)的形式

command &>> /path/to/log

3
是否有充分的理由> /dev/null 2>&1代替使用&> /dev/null
Craig McQueen

7
@CraigMcQueen &>是Bash 4中的新功能,前者只是传统方式,我已经习惯了(容易记住)。
特里·王

根据对评论@CraigMcQueen 这个答案&> /dev/null可能无法在某些贝壳,但>的/ dev / null的2>&1将在所有POSIX兼容的外壳携手。
Stack

3
为什么2>&1而不是2&1>?
marienbad

1
@marienbad实际上是一个值得发布的问题:-)语法是fn>target,其中fn是文件号(通常为0-2,某些程序定义了更多数字),target通常是文件名,但这里是另一个文件号-前缀&为“我想要文件号而不是文件名”的语法。
toolforger

9

/dev/null在Linux / Unix中被视为黑洞,因此​​您可以在其中添加任何内容,但您将无法从中获取它/dev/null

此外,这2>意味着您>要将stderr(即2)重定向(即)到黑洞(即/dev/null)中

您的命令是:

grep -i 'abc' content 2>/dev/null 

不要试图以这样的另一个正斜杠结尾- 2>/dev/null/(它不是目录)。


2

grep -i'abc'内容将生成显示在控制台上的输出,包括所有错误。

指定2>/dev/null将滤除错误,以使它们不会输出到您的控制台。

更详细地:2表示错误描述符,将其写入错误。默认情况下,它们被打印在控制台上。

\> 在这种情况下,将输出重定向到指定位置 /dev/null

/dev/null 是将要忽略的输出发送到的标准Linux设备。


简洁明了。好答案。
Sergiy Kolodyazhnyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.