我正在尝试抑制and中的GtkDialog
警告:zenity
yad
$ zenity --error --text hello
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
错误重定向和过滤工作:
$ zenity --error --text hello 2> >(grep -v GtkDialog >&2)
是的...烦人的警告信息消失了!!
这可以~/.bashrc
用于开发工作,如下所示:
和这里:
但是,在创建供其他人使用的脚本时,您不希望他们改变他们的~/.bashrc
.
我在为以下内容创建键入快捷方式时遇到问题:2> >(grep -v GtkDialog >&2)
要在脚本中使用。
由于许多原因,变量赋值GTK_SPAM="2> >(grep -v GtkDialog >&2)"
后跟变量使用"$GTK_SPAM"
不起作用。
alias zenity="zenity 2> >(grep -v GtkDialog >&2)"
在调用脚本之前,但我不能在脚本中使用它。
使用数组来保存输入快捷方式不起作用:
$ aGtkSpam=(2\> \>\(grep -v GtkDialog \>\&2\))
$ DumpArray "${aGtkSpam[@]}"
Array Elements:
0: 2>
1: >(grep
2: -v
3: GtkDialog
4: >&2)
$ zenity --error --text hello "${aGtkSpam[@]}"
This option is not available. Please see --help for all possible usages.
$ yad --text hello 2> >(grep -v GtkDialog >&2)
$ yad --text hello "${aGtkSpam[@]}"
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
我发现了许多关于分词和参数的优秀通用答案,这些答案应该可以解决我的问题,但特定的语法却让我望而却步。
有什么线索吗?
我不认为单独的语法可以帮助你 - 因为 shell 设置重定向和扩展变量的顺序。举一个非常简单的例子:
即所有内容都已“正确”扩展,但
> /dev/null
只是成为传递给的字符串参数列表echo
。您可以使用以下命令强制评估
eval
:但实际上,在脚本执行期间重定向流会更好
exec
:或者,如果您希望能够在脚本结束之前关闭过滤器,那么基于After using
exec 1>file
,如何停止 STDOUT 到文件的重定向并恢复 STDOUT 的正常运行?应该可以然后稍后
恢复重复的流。
expand_aliases
如果您设置了shell 选项,您可以在脚本中定义和使用别名,例如:现在每一
zenity
行的行为都好像2> >(grep -v GtkDialog >&2)
被添加了一样,您可以像往常一样通过添加反斜杠或来禁用此行为command
:两者都忽略别名。
进一步阅读
您可以在脚本中使用函数。
zenity
并yad
在标准输出中有有用的信息,所以我建议将标准错误重定向到/dev/null
btw 函数可以在 .bashrc 中定义,如果需要在命令行中,而不是脚本中