Bashスクリプトでは、バックグラウンドプロセスが完了するまで数秒待つ必要がある場合があります。
私は通常例えば使用します:
sleep 10
スクリプトに一種のプログレスバーを追加して、ユーザーが待機する時間を知るにはどうすればよいですか?
コマンドbar
をインストールしましたが、マニュアルがわかりません。
while true;do echo -n .;sleep 1;done &
sleep 10 # or do something else here
kill $!; trap 'kill $!' SIGTERM
echo done
これにより、スピナーを毎秒エコーする無限のwhileループが開始され、バックグラウンドで実行されます。
sleep10
コマンドの代わりに、必要なコマンドを実行します。
そのコマンドの実行が完了すると、これはバックグラウンドで実行されている最後のジョブを強制終了します(これは無限のwhileループです)
ソース: https://stackoverflow.com/a/16348366/106908
代わりに、さまざまなwhileループを使用できます。このようなスピナー:
while :;do for s in / - \\ \|; do printf "\r$s";sleep 1;done;done
これはあなたを始めるのに十分なはずです:
#!/bin/bash
for i in {001..100}; do
sleep 1
printf "\r $i"
done
\r
エスケープシーケンスを使用すると、改行なしで行が最初に戻ります。これにより、何百行もの出力がなくても出力を更新できます。このベースを使用することにより、単に数字を出力する代わりに、=>25% ==>50% ===>75%
などの矢印をゆっくりと出力する方法を見つけることができます。非常に基本的な方法でこれを行うには、if-thenロジックを使用して、数のサイズに応じて特定の数の=を出力します。
cursor Movements を使用して、カウントダウンを表示するために行を書き換えます。
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."