Bashの進行状況バーの可視化待ち時間

Bashの進行状況バーの可視化待ち時間

Bashスクリプトでは、バックグラウンドプロセスが完了するまでユーザーが数秒待つ必要がある場合があります。

私は通常、次の例を使用します。

sleep 10

ユーザーがどれだけ待つべきかを知るために、スクリプトに進行状況バーをどのように追加しますか?

コマンドをインストールしましたが、barマニュアルを読むことができません。

答え1

while true;do echo -n .;sleep 1;done &
sleep 10 # or do something else here
kill $!; trap 'kill $!' SIGTERM
echo done

その後、無限のwhileループが始まり、毎秒スピナーをエコーし​​、バックグラウンドで実行されます。

commandの代わりに目的のコマンドを実行してくださいsleep 10

コマンドの実行が完了すると、バックグラウンドで実行されている最後のジョブが終了します(これは無限のwhileループです)。

源泉:https://stackoverflow.com/a/16348366/1069083

代わりに、次のスピナーなどのさまざまなwhileループを使用できます。

while :;do for s in / - \\ \|; do printf "\r$s";sleep 1;done;done

答え2

始めるのに十分です。

#!/bin/bash

for i in {001..100}; do
    sleep 1
    printf "\r $i"

done

\r改行なしで行を最初に戻すには、エスケープシーケンスを使用します。これにより、何百行もの出力なしで出力を更新できます。このベースを使用すると、=>25% ==>50% ===>75%単に数字を出力するのではなく、ゆっくりと矢印を出力する方法を見つけることができます。 if-thenロジックを使用して、数値のサイズに応じて=の特定の数字を印刷する非常に基本的な方法でこれを行うことができます。

答え3

これは用途ですカーソル移動これにより、カウントダウンを表示する行が再作成されます。

c=5 # seconds to wait
REWRITE="\e[25D\e[1A\e[K"
echo "Starting..."
while [ $c -gt 0 ]; do 
    c=$((c-1))
    sleep 1
    echo -e "${REWRITE}$c"
done
echo -e "${REWRITE}Done."

答え4

ファイルコピープロセスの進行状況を表示するには、次のように簡単に使用できます。

pv source_file > destination_file

または

rsync --progress source_file destination_file

cpコマンドではなく

関連情報