我想要对以下命令行进行简要解释:
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
更简洁,但在较旧的系统上不起作用。
答案2
简而言之,它将stderr
(fd
2)重定向到黑洞(丢弃命令的输出)。
一些常用的重定向模式:
command > /dev/null 2>&1 &
command
在后台运行,丢弃stdout
并stderr
command >> /path/to/log 2>&1 &
运行command
,并将 附加stdout
到stderr
日志文件。
在 Bash 4+ 中,可以使用更短(但可读性较差)的形式
command &>> /path/to/log
答案3
/dev/null
在 Linux/Unix 中被视为黑洞,因此您可以将任何东西放入其中,但无法从中取回/dev/null
。
进一步说,这2>
意味着你正在将>
stderr重定向2
到黑洞/dev/null
你的命令是:
grep -i 'abc' content 2>/dev/null
不要尝试以这样的另一个正斜杠结尾 - 2>/dev/null/
(它不是一个目录)。
答案4
首先我们需要讨论一下>
运算符。它将符号左侧的输出重定向到符号右侧。
因此必须认为:
源命令 > 目标文件
我们必须知道的其他事情
0 means stdin
1 means stdout(useful output)
2 means stderr(error message output)
作为默认,其工作原理如下command 1 > target_file
至于/dev/null
--> 它是一个特殊的文件,它丢弃了到它的通道输出重定向。
所以在你的问题中这意味着
运行命令并不要显示错误消息,丢弃它们。