当我从与窗口系统相关的终端(例如 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
.