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

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

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

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

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

答案1

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

$ eclipse >/dev/null

并且不应有任何输出。

要抑制错误消息:

$ eclipse >/dev/null 2>&1

或者在 bash 中,简单来说:

$ eclipse &>/dev/null

但如果他们以不同的方式去做,那么阻止它在控制台中写入可能会有问题。

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

答案2

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

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

你可以编写这样的函数:

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

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

解释:

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

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

答案3

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

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

相关内容