执行命令时如何隐藏终端输出?


62

当我从命令行启动某些程序(如11.10中的eclipse和Document Viewer)时,它会散发出看似无关紧要的信息。

另外,当它们在后台运行时,有时会继续向我当前正在使用的终端产生输出,这很令人讨厌。

我希望他们只是启动并将后台内容保留在后台。我的理由是,如果通过GUI启动这些程序(例如,双击图标),这些消息将永远不会显示给我,因此在命令行中不需要它们。


Answers:


81

如果可以避免在控制台中编写内容,则取决于如何创建程序的输出。如果将其流式传输到标准输出,那么就足够了

$ eclipse >/dev/null

并且不应该输出。

还要抑制错误消息:

$ eclipse >/dev/null 2>&1

或简单地:

$ eclipse &>/dev/null

但是,如果他们以不同的方式进行操作,那么阻止它在控制台中写入可能是一个问题。

如果可能,请使用MuffinStateWide提供的解决方案


2
可能想eclipse 2&>1 >/dev/null摆脱它stderr。默认仅重定向stdout。并且没有“不同”的方式来执行此操作,如果将stdout和stderr都清除到下层,将没有任何输出。
TC1 2012年

@ TC1原则上,程序可以重新打开/ dev / tty并在此打印输出。实际上,GUI程序不会这样做。
Random832 2012年

@ Random832原则上,我建议将stderr管道传输到/ dev / dsp或aplay以获取额外的lulz ... :)但是您是对的,理论上可以在实践中完成-我可能会在至少要向做那个的人写一封相当不礼貌的电子邮件。
TC1 2012年

5
@ TC1“ 2>&1> / dev / null”将stdout重定向到位存储桶,但stderr不会被重定向。您需要颠倒顺序并执行:“> / dev / null 2>&1”
William Pursell 2012年

9
您也可以执行以下操作:eclipse &> /dev/null。这将stdin和stderr都捕获到重定向点(以bash表示)
沃伦2012年

12

您可以创建一个bash函数,该函数将为命令名加上别名,并添加一些额外的功能来实现您的要求。

例如:假设您要gvim从命令行启动(GUI文本编辑器)。

您可以编写如下函数:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}

(将此功能添加到您的.bashrc.bash_aliases文件中,以便始终加载)

说明:

  • 这将为该gvim命令加上bash函数的别名gvim(因此,当您gvim在bash提示符下键入时,它将调用您的gvim函数,而不是执行real gvim命令。您的函数随后将调用real gvim命令(并接受其常规参数)。一些附加功能:

    • 将stdout和stderr重定向到/dev/null(抑制输出到终端)
    • 用于&在后台运行命令(因此不会阻止您的外壳)
    • 用于disown从外壳中删除后台作业(因此它不会出现在活动作业列表中)
    • 用于nohup从终端分离进程(因此,您可以终止shell会话或关闭终端而不会终止进程)

顺便说一句,我认为这是一个比@Misery所接受的答案更全面的解决方案
Corey Goldberg

6

尝试将--help添加为命令开关,并查找“ quiet”,这将抑制输出,或者仅从GUI启动。并通过开关启动或找到一种通过脚本抑制它的方法

我个人从cli启动以获取该输出,所以我不确定对于所有GUI应用程序是否都可行。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.