Shell Script でプログレスバーを実装する
こんにちは、 @kz_morita です。
時間のかかる処理などを自動化して実行するために Bash を使うことがよくあるのですが、ログなどに進捗を出しておかないとあとどのくらいで終わりそうかがわからずに計画がたてられないといったことがあると思います。
既存の公開されているスクリプト (特に Install Script など) はインストールの進捗がプログレスバーなどで表現されていると思います。
今回はそれをどうやって実現しているのか、調査して実装したので内容についてメモします。
成果物 さきに、今回作った成果物です。progress_bar 関数に、現在の進捗と全体の処理数渡したらいい感じにプログレスバー出してくれるように実装しました。
https://gist.github.com/foresta/1c2fd61c93faf08c17a0b423a2640b94 #!/bin/bash progress_bar() { current=$1 total=$2 progress=$(($current * 100 / ${total})) bar="$(yes '#' | head -n ${progress} | tr -d '\n')" if [ -z "$bar" ]; then bar='_' fi printf "\r[%-100s] (%d/%d)" ${bar} ${current} ${total} } echo "[Start]" total=100 for i in $(seq 1 ${total}); do progress_bar $i $total sleep 0.05 done echo "" 実行すると以下のような結果になります。それっぽい結果になったのではないかと思います。