2>/dev/null每次调用 zenity 时自动添加

2>/dev/null每次调用 zenity 时自动添加

Zenity 总是在终端中显示警告,这让我很烦恼:

Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.

显然我不是唯一一个:

几乎所有答案都告诉您通过附加到命令末尾来更改调用 zenity 的方式2>/dev/null。我不想对我已经编写的所有代码都这样做,并记住这一点以供将来编写代码时使用。

有没有更简单的方法可以让这个烦人的消息消失?

答案1

更新 2019-05-17:OP 找到了另一种解决方案,与此处介绍的方法相同,即通过使用 exec 命令进行全局重定向。请参阅链接的重复帖子了解更多信息

stderr基本上,除了重定向到 之外没有其他方法/dev/null。主要原因是 Gtk 要求对话框窗口(即zenity窗口实际是 )具有父应用程序窗口。如果您使用 c 或 python 从头构建 GUI 对话框,也会发生同样的事情。

因此,唯一“真正”的方法是 Gtk 开发人员真正允许对话框窗口独立存在,或者 zenity 开发人员从源代码​​中消除这些警告。否则,您唯一的选择就是不断2>/dev/null向任何zenity命令添加内容。当然,您可以随时创建一个别名或包装函数来为您完成此操作,如下所示:

zenity(){
    /usr/bin/zenity "$@" 2>/dev/null
}

然而,这可能在引用和传递参数方面存在问题,但在大多数情况下应该可以正常工作。如果您使用 Python 或其他可以实际处理 Gtk 的语言,您可以制作自己的带有隐藏父窗口的弹出对话框,但这需要付出复杂性和学习如何创建这些东西的代价。但同样,真正的方法是让zenity开发人员真正解决这个问题,或者让 Gtk 开发人员承认需要独立的对话框窗口。

答案2

2>/dev/null每次调用 zenity 时自动添加

编辑文件~/.bashrc并搜索以下行:

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'

在后面添加以下几行:

# Add zenity alias to make the annoying terminal error message disappear forever:
# "Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged."
alias zenity="zenity 2>/dev/null"

保存文件并打开一个新的终端窗口进行测试:

zenity --info --text "Hello Zenity-Silly-Error-Free World"

瞧!所有旧代码都已修复,将来的代码无需2>/dev/null像其他答案所指示的那样附加到旧代码中。

答案3

我更喜欢这样编辑~/.bashrc

alias zenity="zenity 2> >(grep -v 'GtkDialog' >&2)"

这是更加严格的,只禁止带有 GtkDialog 字符串的警告消息,而显示其他错误或警告消息

相关内容