如何真正隐藏启动过程中的所有控制台输出?

麦可

我从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 &

正如在“重定向stderrstdout和他们两个管伸到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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在启动过程中更改默认控制台日志级别

为什么控制台输出在启动过程中会停止以粗体显示,我该如何更改此行为?

如何在Jenkins控制台输出中隐藏密码?

如何收集所有控制台输出或访问前端中控制台的当前内容

找出 bash / dash / sh 在启动过程中读取的所有文件

在启动过程中启动服务

在启动过程中如何执行mdadm?

如何防止在@SpringBootTest启动过程中记录的噪音?

在启动过程中如何显示grub?

在gVim启动过程中,如何打开多个文件?

如何在启动过程中插入linuxefi模块

节点启动过程中如何在主等待?

如何找到启动过程中启用的未知程序?

如何跟踪启动过程中哪个操作较低?

如何在启动过程中删除奇怪的标志

启动过程,等待它,并丢弃所有输出

如何从PHP编写的控制台命令的输出中删除所有格式

如何返回 url 中的所有“a”标签并使用 jQuery 将它们输出到控制台?

opendkim启动过程中的问题

启动过程中的PID污染

在启动过程中唤醒硬盘

如何将所有控制台输出都放在一个文件中,同时在控制台C#上显示呢?

如何隐藏 Chromedriver 控制台消息/输出

Jenkins管道脚本中的withContext()隐藏控制台输出

在X启动之前,如何阅读启动过程中显示的消息?

如何在Sublime Text 3中隐藏底部控制台文本输出区域?

如何从控制台输出中隐藏我在MSBuild Exec任务中使用的命令?

在启动过程中不显示启动菜单

如何捕获在ECS上启动的容器的控制台输出?