この質問にはすでに回答があります:
コメント
回答
これは単純なBashで行うのはかなり簡単です:
#!/bin/bash # progress bar function prog() { local w=80 p=$1; shift # create a string of spaces, then change them to dots printf -v dots "%*s" "$(( $p*$w/100 ))" ""; dots=${dots// /.}; # print those dots on a fixed-width space plus the percentage etc. printf "\r\e[K|%-*s| %3d %% %s" "$w" "$dots" "$p" "$*"; } # test loop for x in {1..100} ; do prog "$x" still working... sleep .1 # do some work here done ; echo
<の最初の引数div id = "0a4f789bb8">
はパーセンテージで、その他はプログレスバーの後に印刷されます。関数の変数w
は、バーの幅を制御します。完了後に改行を印刷します。関数は改行を印刷しません。
もう1つの可能性は、pv
ツールを使用することです。パイプラインのスループットを測定するためのものですが、作成することもできます:
for x in {1..100} ; do sleep .1 # do some work here printf . done | pv -pt -i0.2 -s100 -w 80 > /dev/null
ここでは、-pt
はプログレスバーとタイマーを有効にし、-s 100
は合計出力サイズを設定し、関数内に出力するものはすべてそのサイズにカウントされます。