我有一个重定向问题。
当我不需要任何输出时,我总是使用anycommands > /dev/null 2>&1
。但我从未使用anycommands 2> /dev/null >&2
问题:哪一种是期望没有产出的最佳方法? anycommands > /dev/null 2>&1
和anycommands 2> /dev/null >&2
答案 0 :(得分:2)
情况#1:(echo stdout;echo stderr>&2) >/dev/null 2>&1
/dev/null
&1
复制,现在是fd到/dev/null
例#2:(echo stdout;echo stderr>&2) 2>&1 >/dev/null
&1
复制的,这是默认的stdout /dev/null
stderr
为空,stdout
未显示,stderr
stdout
案例#3:(echo stdout; echo stderr >&2) 2> /dev/null >&2
与案例#1相同,stderr
和stdout
已切换角色
答案 1 :(得分:1)
实际上,这两者是等价的。 cmd > /dev/null 2>&1
将命令的stdout连接到/dev/null
,然后将stderr连接到同一文件。 cmd 2>/dev/null >&2
将stderr连接到/dev/null
,然后将stdout连接到它。唯一的区别在于两个流与/dev/null
关联的顺序,它与运行时命令的状态无关。在这两种情况下,两个流都被重定向到位桶。
答案 2 :(得分:-1)
如果您只使用BASH,请使用&>
重定向stdout和stderr。这是最紧凑,安全和简单的解决方案。
关于您的问题,第一个问题相当于&>
(它将stdout和stderr重定向到/dev/null
。
第二个将stderr连接到/dev/null
并将stdout重定向到新的stderr,因此就输出而言它等效。只是文件描述符操作的顺序是相反的。