特定のタスク(ffmpegまたはfsarchiver)を実行すると、コンソールにいくつかのステータス行を印刷するためのいくつかのコマンドがあります。
-[00][ 0%][DIR ] /boot/grub/fonts
-[00][ 0%][REGFILE ] /boot/grub/fonts/unicode.pf2
-[00][ 0%][REGFILEM] /boot/grub/grubenv
-[00][ 0%][REGFILEM] /boot/grub/grub.cfg
-[00][ 0%][REGFILE ] /boot/initrd.img-4.13.0-16-generic
これで、これらのコマンドを使用するスクリプトを作成したいのですが、出力ではスクリプトメッセージが非常にすばやく消去されます。継続的に更新される進行状況を1行に表示できるnew aptやwgetなどの他のコマンドがあることを知っています。
私は私のスクリプトでこのようなステータスバーで遊んで改行文字を必要とせず、キャリッジリターン文字を配置する必要があることを発見しました。\ rこれは完全に理解されています。
次に、コマンド(ffmpegまたはfsarchiver)を使用して同じ操作を実行して出力をtr "\n" "\r"
。
このコマンドでステータスバーを取得する方法はありますか?
挨拶
答え1
基本的に自分の質問に答えたようです。出力をにパイプするとき BOTH AND ?tr
すべてパイプするのですか?stdout
stderr
答え2
これはバッファリングの問題です。
while true; do date; sleep 1; done | stdbuf --output=0 tr '\n' '\r'