tkuchikiの日記

新ブログ https://blog.tkuchiki.net

Bash で動作するプログレスバー

tkuchiki/bash-progress-bar · GitHub を実装しました。

実装した関数は2つで、

progress_bar TIMES CURRENT

は、TIMES に何回繰り返すか、CURRENT が何回目かを引数に取ります。
TIMES=10, CURRENT=1 の場合、1 / 10 * 100 = 10% のようになるので、
決まった回数繰り返すような処理の時に使うことを想定しています。

progress_bar_bytes TOTAL_FILE_SIZE SENT_FILE_SIZE

は、TOTAL_FILE_SIZE にファイルサイズ、
SENT_FILE_SIZE に送信済みファイルサイズを引数に取ります。
TOTAL_FILE_SIZE=1000000, SENT_FILE_SIZE=100000 の場合、
100000 / 1000000 * 100 = 10% のようになります。
こちらはファイルの進捗も出すようになっています。

実装について

小数点の計算に bc コマンドではなく awk を使っています。
理由は、まっさらな CentOS のコマンドを見てみたところ、
bc コマンドがインストールされていなかったためです(awk は入っていました)。
あと、echo の代わりに printf を使っているのは、
改行抑制のオプションが環境によって異なるためです。
ただ、`` ではなく $() を使っている(こちらも環境によっては使えない)ので、
そこだけ気を使っても意味はなかった気が...

最後に

実装したあとに色々探してみたところ、
同じようなプログレスバーと%を表示する程度の機能のものは、
大体似たような実装方法でした。
これ以外のプログレスバーが必要になったら、追加実装します。
gif animation を初めて作ってみましたが、実装よりも時間がかかりました...