如何使用“progress-bar.sh”显示远程服务器上发生的操作的进度

如何使用“progress-bar.sh”显示远程服务器上发生的操作的进度

我需要将进度条集成到通过 SSH 对远程服务器进行的操作中。

在我的环境中,有几个循环通过 SSH 触发几个远程服务器上的进程。这些进程被触发certainFunction并需要 10 到 60 分钟(取决于许多不可预测的因素)。只要进程是由主服务器控制的,我就想根据时间显示一些进度条,比如百分比或条形图(而不是点或微调器),以指示总体进度。

这可能吗?

寻找我发现的一些奢侈的解决方案Édouard Lopez 的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

但是,如果您无法衡量进程的进展情况,也无法提供实际进度的现实估计,那么提供进度条是没有用的。您最喜欢的窗口管理器的时钟小部件将提供同样多的相关信息。

相关内容