如何禁止应用程序生成的消息发送到我的终端窗口?

如何禁止应用程序生成的消息发送到我的终端窗口?

当我从与窗口系统相关的终端(例如 gnome 或 kde)启动应用程序时,通常这些应用程序会在我的终端中发送各种垃圾消息。如何让这些应用程序关闭?

例如,如果我输入:

 okular somepdf.pdf & 

弹出一个显示 pdf 文件的窗口,我可以在终端旁边阅读 pdf,完成后关闭。

这是一个典型的例子:

:~$ cd Documents
:~/Documents$ okular equi.dvi &
[1] 5823

当我关闭时,它会将这些垃圾发送到终端:

:~/Documents$ okular(5823)/kdeui (kdelibs) KXMLGUIClient::~KXMLGUIClient: 0x2322528 deleted without having been removed from the factory first. This will leak standalone popupmenus and could lead to crashes. 
d

d: command not found
[1]+  Done                    okular equi.dvi
[1]+  Done                    okular equi.dvi
:~/Documents$ 

我唯一想看到的是:

:~$ cd Documents
:~/Documents$ okular equi.dvi &
:~/Documents$

也许该消息是一些错误,我不在乎,我也不想知道它。

是否可以抑制这些消息?

有些人将这个问题标记为与“如何抑制输出”问题重复,但这只是我想要的部分内容:

我想要自动地抑制某些应用程序的所有输出。例如 okular 是一个图形应用程序,所以我永远不会关心它在我的终端中说什么。

正如我上面所说,我希望行为是:

:~$ cd Documents
:~/Documents$ okular equi.dvi &
:~/Documents$

不是就像是

:~$ cd Documents
:~/Documents$ okular equi.dvi > whatever &
:~/Documents$

答案1

要抑制 STDOUT:

yourcommand  1>/dev/null 

抑制 STDERR

yourcommand  2>/dev/null

从 bash 4 开始,你可以抑制两者:

yourcommand &>/dev/null

您还可以使用kdedebugdialog工具禁用 KDE 的调试信息并禁用所选模块的输出(或所有调试输出)。

答案2

您可以将程序的 STDOUT 和 STDERR 发送到虚拟设备/dev/null

$ okular equi.dvi &> /dev/null &

要抑制作业控制消息,您可以在 bash 中禁用监视模式(也许在您的.bashrc):

$ set +m

不过我不会推荐这个。要再次启用它,请使用set -m.

答案3

如果你想隐藏所有文本,只需使用以下命令:

$> yourcommand >/dev/null &

如果您还想重定向 stderr,可以这样做:

$> yourcommand >/dev/null 2>&1 &

答案4

用这个:

okular equi.dvi > /dev/null 2>&1 & 

这会将所有输出(错误消息和常规输出)发送到/dev/null.

相关内容