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

Ana*_*ake 77 command-line

当我从命令行启动某些程序(如 11.10 中的 eclipse 和文档查看器)时,它会产生大量看似无关紧要的信息。

此外,当它们在后台运行时,它们有时会继续向我目前正在处理的终端产生输出,这令人恼火。

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

Mis*_*ery 100

如果您可以避免在控制台中写东西,这取决于程序的输出是如何创建的。如果它被流式传输到标准输出,那么它就足够了

$ eclipse >/dev/null
Run Code Online (Sandbox Code Playgroud)

并且不应该输出。

还要抑制错误消息:

$ eclipse >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

或者在 bash 中,只需:

$ eclipse &>/dev/null
Run Code Online (Sandbox Code Playgroud)

但是,如果他们以某种方式以不同的方式执行此操作,那么阻止它在控制台中写入可能会出现问题。

如果可能,请使用 MuffinStateWide 给出的解决方案

  • 你也可以只做:`eclipse &> /dev/null`。这将 stdin 和 stderr 都捕获到重定向点(在 bash 中) (9认同)
  • @TC1 "2>&1 >/dev/null" 会将 stdout 重定向到位桶,但不会重定向 stderr。您需要颠倒顺序并执行:">/dev/null 2>&1" (5认同)
  • 可能想让 `eclipse 2&>1 >/dev/null` 摆脱 `stderr`。默认只重定向 `stdout`。并且没有“不同”的方法可以做到这一点,如果您将 stdout 和 stderr 都清除到下界,则不会有任何输出。 (2认同)

Cor*_*erg 15

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

例如:假设您想gvim从命令行启动(一个 gui 文本编辑器)。

你可以写一个这样的函数:

function gvim () {
    nohup gvim "$@" > /dev/null 2>&1 & disown
}
Run Code Online (Sandbox Code Playgroud)

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

解释:

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

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

  • 顺便说一句,我认为这是一个比@Misery 接受的答案更全面的解决方案 (2认同)

小智 6

尝试添加 --help 作为命令开关并寻找“安静”这应该抑制输出,或者只是从 GUI 启动。并使用开关启动或找到一种通过脚本抑制它的方法

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