Bashスクリプトに「.」を表示する進行状況バーを追加したいと思います。文字が進み、MAX 180秒後にプロセスが終了します。
Bashスクリプトはカールコマンドを使用するため、カールは一定時間後に結果を提供しますが、180秒を超えません。
似たようなもの
|. after 2 sec
|........... after 60 sec
|................... after 100 sec
|.......................... after 150 sec
|................................| after 180 sec
最終例
|................................| after 180 sec
または
|....| after 30 sec
答え1
通常の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
。その目的はパイプラインのスループットを測定することですが、そのために1つを作成することができます。
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
サイズが設定され、関数内で印刷されるすべての項目がそのサイズに対して計算されます。
答え2
通常、行を上書きしてこれを行うことができます。端末\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プログレスバー」です。