zenity бросает ошибку glibc
Я пытался использовать zenity со стандартным перенаправлением в сценарии оболочки, что-то вроде
для я в $(сек 1 10); сделать эхо $ я; сделано | zenity --list --column = "Number"
Но в командной строке это работает, но выдает следующее предупреждение:
(zenity: 3328): GLib-WARNING **: неверный дескриптор файла.
Похоже, что это происходит только тогда, когда данные перенаправляются в команду Zenity через канал.
Может ли кто-нибудь сказать мне, что означает это предупреждение?
1 ответ
Эта ошибка вызывается попыткой закрыть стандартный ввод дважды - один раз после того, как все данные были прочитаны из последовательности, а затем, во-вторых, когда он собирается выйти - это в источнике 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 будет сделано следующее: gtk_main_quit
Тогда я думаю, что предупреждение можно смело игнорировать.