我想对以下命令行进行简要说明:

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


#1 楼

>操作员通常将输出重定向到文件,但也可以重定向到设备。您还可以使用>>进行追加。
如果未指定数字,则假定使用标准输出流,但是您也可以重定向错误:
> file将stdout重定向到文件1> file将stdout重定向到文件<
2> file将stderr重定向到文件
&> file将stdout和stderr重定向到文件> file 2>&1将stdout和stderr重定向到文件
/dev/null是空设备,它将接收您想要的任何输入并将其丢弃。它可用于抑制任何输出。
请注意,> file 2>&1是较旧的语法,该语法仍然有效,&> file更整洁,但不适用于较旧的系统。

评论


> / dev / null 2>&1和&> / dev / null之间有区别吗

–亚历山大·米尔斯(Alexander Mills)
17-10-19在0:25

在今天的实践中,我不认为2>&1是较旧的语法,因此&>几年前就无法使用,但两者都是等效的。

–沃伦·希尔
17-10-19在2:47

foob​​ar 2&1>文件不起作用。它将foobar 2命令发送到后台,然后运行命令1,这将失败,它也不会重定向任何输出。您需要foobar> / dev / null 2&> 1或更短的(和imo清除器):foobar&> / dev / null。

– ruohola
20-10-3在12:08



#2 楼

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

一些常用的重定向模式:

command > /dev/null 2>&1 &


在后台运行command,丢弃stdoutstderr

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


运行command,将stdoutstderr附加到日志文件中。

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

command &>> /path/to/log


评论


是否有充分的理由使用> / dev / null 2>&1而不是&> / dev / null?

–克雷格·麦昆(Craig McQueen)
2015年11月30日下午6:43

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

–王T
2015年11月30日12:24



@CraigMcQueen根据对此答案的评论,&> / dev / null可能在某些shell中不起作用,但> / dev / null 2>&1将在所有POSIX兼容shell中起作用。

–堆栈下溢
19年1月6日在23:41



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

– Marienbad
19年3月11日在21:30

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

–toolforger
19年6月7日在4:12

#3 楼

/dev/null在Linux / Unix中被视为黑洞,因此​​您可以在其中放入任何内容,但无法从/dev/null取回。

进一步,2>表示您正在重定向(例如,> )将stderr(即2)插入黑洞(即/dev/null)中。您的命令是:

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


不要尝试结束还有另一个这样的正斜杠-2>/dev/null/(它不是目录)。

#4 楼

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

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

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

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

/dev/null是标准Linux设备,您在其中将输出发送给您。要忽略。

评论


简洁明了。好答案。

– Sergiy Kolodyazhnyy
19年5月24日在23:13

#5 楼

首先我们需要谈谈>运算符。它将符号左侧的输出重定向到符号右侧。

因此必须将其视为:


source_command> target_file


其他我们必须知道的其他内容

0 means stdin 
1 means stdout(useful output)
2 means stderr(error message output)


默认情况下,它用作command 1 > target_file

关于/dev/null->这是一个特殊的文件,它丢弃重定向到它的通道输出。

所以在您的问题中表示


运行命令,不要显示错误消息,请丢弃它们。


评论


了解不同描述符的含义非常有用,以获得更多上下文,并为我节省了更多的Google搜索。

– maulik13
20 Dec 14'在10:05