SSH 経由のリモート サーバー上の操作に進行状況バーを統合する必要があります。
私の状況では、SSH 経由でいくつかのリモート サーバーでプロセスをトリガーするループがいくつかあります。これらのプロセスはトリガーされcertainFunction
、10 分から 60 分かかります (予測できない多くの要因によって異なります)。プロセスがメイン サーバーから制御されている限り、全体的な進行状況を示すパーセンテージやバー (ドットやスピナーではありません) などのタイミングに基づいた進行状況バーを表示したいと思います。
これは可能ですか?
何か贅沢な解決策を探していたらエドゥアール・ロペスのprogress-bar.sh
プロジェクト私のニーズに合うように。
次のコードは次のとおりですprogress-bar.sh
:
progress-bar() {
local duration=${1}
already_done() { for ((done=0; done<$elapsed; done++)); do printf "▇"; done }
remaining() { for ((remain=$elapsed; remain<$duration; remain++)); do printf " "; done }
percentage() { printf "| %s%%" $(( (($elapsed)*100)/($duration)*100/100 )); }
clean_line() { printf "\r"; }
for (( elapsed=1; elapsed<=$duration; elapsed++ )); do
already_done; remaining; percentage
sleep 1
clean_line
done
clean_line
}
私の状況で使用できますか? 追加のパッケージがインストールされていない純粋な Bash ソリューションを探しています。
答え1
プログレスバーを書くのは簡単です。それはあなたの問題ではありません。
declare -i progress
progress=1
declare -i width
width=$(tput cols)-10
declare -i pbarlength
prt_bar(){
pbarlength=$((width*progress/100))
echo -en "\r"
for i in `seq $pbarlength` ; do
echo -n '='
done
echo -en " $progress "
}
またはそのようなもの
主な問題は、自分の進捗状況を判断することです。時間でやろうとすると、間違いなく誤った進捗状況を感じることになります。なぜなら、プロセスには 10 分から 60 分かかるからです (予測できない多くの要因によって異なります)。
タイミングだけを基準にする場合は、次のようにします。
while [ $progress -lt 100 ] ; do
progress=$((progress+1))
prt_bar
sleep 10
done
echo
echo done
しかし、プロセスの進行状況の測定基準がなく、実際の進行状況を現実的に見積もることができない場合は、進行状況バーを提供しても意味がありません。お気に入りのウィンドウ マネージャーの時計ウィジェットでも、同様の関連情報を提供できます。