コマンド出力をYadにパイプし、出力をログファイルに書き込みます。

コマンド出力をYadにパイプし、出力をログファイルに書き込みます。

表示するには、コマンドプロセス(通常は更新)が必要です。また、指定したログファイル設定にすべての出力を記録します。これは私のものです。

apt-get update | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

上記のコマンドはプロセスのハートビートインジケータを生成し、完了すると閉じますが、試行したすべての出力を記録する必要があります。

apt-get update >>${logfile} 2>&1 | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10 

ただし、これによりエラーが発生し、ダイアログボックスやロギングなしで中断され、停止します。これはエラーです。

 GLib-CRITICAL **: g_source_remove: assertion `tag > 0' failed

助けてくれてありがとう

答え1

エラーは、すべての出力を次にリダイレクトするため、処理する出力がないため$logfileに発生します。yadあなたが探しているツールは次のとおりですtee

NAME
       tee - read from standard input and write to standard output and files

SYNOPSIS
       tee [OPTION]... [FILE]...

DESCRIPTION
       Copy standard input to each FILE, and also to standard output.

したがって、次のようにすることができます。

apt-get update 2>&1 | tee -a ${logfile} |
  yad --width=400 --height=300 \
    --title="Updating debian package list ..." --progress \
    --pulsate --text="Updating debian package list ..." \
    --auto-kill --auto-close \
    --percentage=10 

答え2

もう1つの可能性は、出力をapt-getログファイルとして指定し、このプロセスをバックグラウンドで実行し、次をyad使用してそのログファイルの増分を進行状況バーのあるウィンドウに「サイフォン」することですtail -f

apt-get update > "$logfile" & tail -f "$logfile" | yad --width=400 --height=300 \
--title="Updating debian package list ..." --progress \
--pulsate --text="Updating debian package list ..." \
--auto-kill --auto-close \
--percentage=10

関連情報