我一直在尝试在 shell 脚本中使用 zenity 和标准重定向,比如
对于我在 $(seq 1 10); 回声 $i; 完成 | zenity --list --column =“数字”
但在命令行上这可行,但会引发以下警告:
(zenity:3328): GLib-WARNING **: 无效的文件描述符。
这似乎只有在数据通过管道重定向到 Zenity 命令时才会发生。
谁能告诉我这个警告意味着什么?
我一直在尝试在 shell 脚本中使用 zenity 和标准重定向,比如
对于我在 $(seq 1 10); 回声 $i; 完成 | zenity --list --column =“数字”
但在命令行上这可行,但会引发以下警告:
(zenity:3328): GLib-WARNING **: 无效的文件描述符。
这似乎只有在数据通过管道重定向到 Zenity 命令时才会发生。
谁能告诉我这个警告意味着什么?
这个错误是通过尝试关闭标准输入两次触发的——一次是在从序列中读取所有数据之后,第二次是因为它即将退出——这是在 zenity 源中。这纯粹是装饰性的,可以安全地忽略 - zenity 代码除了在此时退出之外什么都不做。
在处理程序zenity_tree_handle_stdin
中,在例程结束时它关闭了相同的通道(由于在函数中和全局范围内使用相同的命名变量而导致变量隐藏):
if ((condition != G_IO_IN) && (condition != G_IO_IN + G_IO_HUP)) {
g_io_channel_shutdown (channel, TRUE, NULL);
return FALSE;
}
在tree.c
程序即将退出的第 648 行中:
if (channel != NULL)
g_io_channel_shutdown (channel, TRUE, NULL);
这两个代码路径都将尝试关闭同一个通道,从而导致警告。因为在第 648 行之后要做的下一件事是发出 a gtk_main_quit
,所以我认为可以安全地忽略该警告。