
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
コマンドではなく