我已经在stackoverflow和其他有关2>& 1使用的来源中检查了几个相关帖子。
不幸的是到目前为止还没有完全了解它。
我知道2是stderr,1是标准输出,我们正在与2>& 1结合。
但我的问题是:
之间的区别1. mycommand > /dev/null
2. mycommand 2> /dev/null
3. mycommand > /dev/null 2>&1
我在想:
相关帖子:
答案 0 :(得分:13)
见:
<强> mycommand > /dev/null
强>
它会将mycommand的通道1(stdout)重定向到/ dev / null
<强> mycommand 2> /dev/null
强>
它会将通道2(stderr)重定向到/ dev / null
<强> mycommand > /dev/null 2>&1
强>
它会将通道1重定向到/ dev / null,然后将通道2(stderr)绑定到通道1(stdout)。两者都将进入/ dev / null
还有另一个(只是为了完成)
<强> mycommand 2>&1 > /dev/null
强>
在第二种情况下,我将(孩子的)stderr绑定到stdout(的) 父)然后我发现孩子的stdout到/ dev / null。结果是 你现在在stdout和stdout上得到了孩子的stderr输出 转到文件。这对于处理管道中的stderr非常有用 例。 (见answer)
答案 1 :(得分:4)
(错误文件不存在)
$ cat errfile
cat: 0652-050 Cannot open errfile.
$ cat errfile > /tmp/stream.out
cat: 0652-050 Cannot open errfile.
$ cat errfile > /tmp/stream.out 2>&1
$ cat /tmp/stream.out
cat: 0652-050 Cannot open errfile.
($ rm /tmp/stream.out)
$ cat errfile 2>&1 > /tmp/stream.out
cat: 0652-050 Cannot open errfile.
$ cat /tmp/stream.out
$
由于shell解释中的流重定向,因此顺序非常重要且2>&1 1>out
与1>out 2>&1
不同。你应该以“反向”顺序重定向。 stdout > final
比source > stdout
答案 2 :(得分:3)
尝试这些来获得差异:
echo "stderr" > /dev/fd/2 | >/dev/null
stderr
echo "stdout" > /dev/fd/1 | >/dev/null
这两个命令都重定向到/dev/null
,但在第一个命令中我们写入stderr打印stderr但在第二个打印stderr
答案 3 :(得分:0)
1:将STDOUT重定向到/ dev / null,在这种情况下使用默认文件描述符,例如命令[默认]&gt; filename,默认文件描述符是STDOUT。
2:将STDERR重定向到/ dev / null
3:将STDOUT重定向到/ dev / null并将STDERROR重定向到STDOUT,这意味着STDOUT和STDERROR都将重定向到/ dev / null
0,1,2 ... 9是bash中的文件描述符。 0代表stdin,1代表stdout,2代表stderror。任何其他临时使用都可以使用3~9。
可以使用运算符&gt;将任何文件描述符重定向到其他文件描述符或文件。或&gt;&gt;(追加)。
用法:&gt;