Nai*_*ive 354 command-line bash redirect stdout
我想简要说明以下命令行:
grep -i 'abc' content 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
War*_*ill 500
的>操作者输出通常重定向到一个文件,但它可以是一个设备。您也可以使用>>追加。
如果您不指定数字,则假定为标准输出流,但您也可以重定向错误:
> file将标准输出重定向到文件
1> file将标准输出重定向到文件
2> file 将 stderr 重定向到文件
&> file将 stdout 和 stderr
> file 2>&1重定向到文件将 stdout 和 stderr 重定向到文件
/dev/null是空设备,它接受您想要的任何输入并将其丢弃。它可用于抑制任何输出。
请注意,这> file 2>&1是一个仍然有效的旧语法,&> file更简洁,但不适用于旧系统。
Ter*_*ang 38
简而言之,它将stderr(fd2)重定向到黑洞(丢弃命令的输出)。
一些常用的重定向模式:
command > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)
command在后台运行,丢弃stdout并stderr
command >> /path/to/log 2>&1 &
Run Code Online (Sandbox Code Playgroud)
运行command,附加stdout和stderr到日志文件。
在 Bash 4+ 中,更短(但可读性较差)的形式是功能性的
command &>> /path/to/log
Run Code Online (Sandbox Code Playgroud)
小智 15
/dev/null在 Linux/Unix 中被视为黑洞,因此您可以将任何内容放入其中,但无法从/dev/null.
此外,2>意味着您正在将(即>)stderr(即2)重定向到黑洞(即/dev/null)
你的命令是:
grep -i 'abc' content 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
不要尝试以这样的另一个正斜杠结尾 - 2>/dev/null/(它不是目录)。
小智 7
grep -i 'abc' content 将生成显示在控制台上的输出,包括任何错误。
指定2>/dev/null将过滤掉错误,以便它们不会输出到您的控制台。
更详细地说: 2 表示错误描述符,这是写入错误的地方。默认情况下,它们会打印在控制台上。
\> 将输出重定向到指定的位置,在这种情况下 /dev/null
/dev/null 是标准 Linux 设备,您可以在其中发送要忽略的输出。
小智 5
首先我们需要谈谈>运营商。它将符号左侧的输出重定向到符号右侧。
所以它必须被认为是:
源命令 > 目标文件
其他我们必须知道的事情
0 means stdin
1 means stdout(useful output)
2 means stderr(error message output)
Run Code Online (Sandbox Code Playgroud)
默认情况下,它的工作方式如下command 1 > target_file
至于/dev/null--> 它是一个特殊文件,会丢弃指向它的通道输出重定向。
所以在你的问题中这意味着
运行该命令,不要向我显示错误消息,将其丢弃。