如何使用「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

但是,如果您無法衡量流程的進展情況,並且無法提供實際進度的現實估計,那麼提供進度條是沒有用的。您最喜歡的視窗管理器的時鐘小工具將提供盡可能多的相關資訊。

相關內容