"。"を表示する進行状況バーをbashスクリプトに追加したいと思います。進行状況としての文字、およびプロセスはMAX 180秒後に終了しました
bashスクリプトではcurlコマンドを使用するので、curlはしばらくすると結果を出しますが、180秒を超えない
そんな感じ
|. after 2 sec
|........... after 60 sec
|................... after 100 sec
|.......................... after 150 sec
|................................| after 180 sec
最後の例
|................................| after 180 sec
または
|....| after 30 sec
これは単純な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
prog
の最初の引数はパーセンテージで、他の引数は進行状況バーの後に印刷されます。関数の変数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
は合計出力サイズを設定し、関数内で出力するものはすべてそのサイズに対してカウントされます。
通常、これは行を上書きすることで実装できます。 \r
を使用して、端末に\n
を書き込まずに行の先頭に戻ります。
行を進めるために終わったら、\n
と書きます。
echo -ne
を使用して:
\n
および\r.
のようなエスケープシーケンスを認識するここにデモがあります:
echo -ne '... (33%)\r'
sleep 1
echo -ne '...... (66%)\r'
sleep 1
echo -ne '.......... (100%)\r'
echo -ne '\n'
編集:今、cURLにはプログレスバーが付いています:_--progress-bar
、それはあなたが望むものではありませんか?
https://stackoverflow.com/questions/238073/how-to-add-a-progress-bar-to-a-Shell-script の回答から取得
Googleで、最初の回答として、次の検索語句で見つけた:「bashプログレスバー」