「progress-bar.sh」を使用してリモートサーバーで発生する操作の進行状況を表示する方法

「progress-bar.sh」を使用してリモートサーバーで発生する操作の進行状況を表示する方法

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

しかし、プロセスの進行状況の測定基準がなく、実際の進行状況を現実的に見積もることができない場合は、進行状況バーを提供しても意味がありません。お気に入りのウィンドウ マネージャーの時計ウィジェットでも、同様の関連情報を提供できます。

関連情報