0

私は、シェルスクリプトで標準のリダイレクトでzenityを使用しようとしています。

$(seq 1 10) の i に対して; do echo $i; 完了 | zenity --list --column ="数値"

ただし、コマンドラインではこれは機能しますが、次の警告がスローされます。

(zenity:3328): GLib-WARNING **: 無効なファイル記述子です。

これは、データがパイプを介して Zenity コマンドにリダイレクトされた場合にのみ発生するようです。

この警告の意味を教えてください。

4

1 に答える 1

1

このエラーは、stdin を 2 回閉じようとした場合に発生します。1 回目はすべてのデータがシーケンスから読み取られた後、2 回目はちょうど終了しようとしているときに発生します。これは zenity ソースにあります。これは純粋に表面的なものであり、安全に無視できます。zenity コードは、その時点で終了する以外には何もしていません。

handlerzenity_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この警告は無視しても問題ないと思います。

于 2012-06-05T08:26:01.727 に答える