我从firefox收到了所有我不在乎的消息:
Gtk-Message: Failed to load module "pk-gtk-module"
Gtk-Message: Failed to load module "canberra-gtk-module"
所以我杀死firefox
并重新启动它是这样的:
$ firefox 2>&1 > /dev/null &
正如在“重定向stderr
到stdout
和他们两个管伸到null
”。
不幸的是,那些讨厌的消息并没有消失。实际上,我正在开始在firefox
其中键入此问题的会话的终端窗口仍在生成它们。
因此,问题是:
为什么上述重定向不起作用?
如何正确重定向它们?
您必须按照相反的顺序进行操作:首先将stdout重定向,然后将stderr重定向到stdout:
firefox >/dev/null 2>&1 &
编辑:这是一个解释。2>&1
是文件描述符复制操作(请参见bash手册页并搜索Duplicating File Descriptors
):它表示“复制文件描述符2可以执行与文件描述符1相同的操作”。之后,写入fd 2的所有内容都会发送到fd 1发送内容的任何地方。因此stderr(2)和stdout(1)将写入同一位置。但是它们是独立的,因此如果您之后更改fd 1(例如,通过重定向stdout),fd 2将保持不变:它仍将写入最后一次重定向之前fd 1正在写入的位置。
如果先重定向标准输出然后复制,则fd 1和fd 2都将写入同一位置:fd 1重定向到的位置。
基本上,shell从左到右执行重定向/复制,因此您必须正确执行顺序。
请注意,作为一种特殊情况,bash提供了将stdout和stderr都重定向到同一位置的快捷方式:
cmd &> /dev/null
相当于
cmd > /dev/null 2>&1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句