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Тогда я думаю, что предупреждение можно смело игнорировать.

Другие вопросы по тегам