私のプログラムの一部には、dialog
ファイルに対してunsquashfsを実行してファイルをディレクトリに抽出することが含まれています。オプションを使用して進行状況を表示するために、このタスクの進行状況バーを作成しようとしています--gauge
。私が試したことは次のとおりです。
unsquashfs -f -q -d extract_directory filesystem.squashfs | dialog --title "Progress" --gauge "Unsquashing filesystem..." 7 60
-i
また、unsquashfsやunsquashfsなどの他のオプションを試してみましたが、-n
そのうち何も機能しないようです。進行状況バーは表示されますが、常に0%で停止します。それを動作させることは可能ですか?必要に応じて奇妙な解決策を使用しても問題ありません。
答え1
それほど簡単ではありません。dialog --gauge
標準入力では、1行に1つずつの割合を期待します。
しかし、unsquashfs
そのような出力はありません!おそらくコンソール制御文字を使用して進行状況バーを更新します(少なくともlibncursesに接続されていません)。
重要な部分はprogressbar.c
squashfs-toolsソースコードの145番目の縮小です:
printf("\r[");
…
printf(" %3d%%", percentage);
制御文字が\r
現在の行の先頭にジャンプし、進行状況バーがその行を覆い、最後にパーセントが印刷されます。
だからあなたはおそらく似たようなものが必要です。
unsquashfs linux.squash | tr $'\r' $'\n' | sed -ne 's/^.* \([[:digit:]]*\)\%$/\1/p' | dialog --gauge
しかし、私はそれがうまくいくかどうか疑問です。ほとんどのバッファリングが発生し、すべてのパーセンテージがすぐに表示されます(なしで試してください| dialog --gauge
)。
正直なところ、unsquashfsの進行状況バーは機能します。同じダイアログを表示するのではなく、単に表示しますか?
それに加えて、squashfsを解凍することができるいくつかの点があり、それを使用して他のものの代わりにパーセントを出力する独自のプログラムを構築することができるようです。mksquashfs
あるいは、ソースコードにコマンドラインスイッチを追加してunsquashfs
それを実行することもできます。おそらくここで最も簡単な解決策でしょう。