Cómo utilizar “progress-bar.sh” para mostrar el progreso de las operaciones que ocurren en servidores remotos

Cómo utilizar “progress-bar.sh” para mostrar el progreso de las operaciones que ocurren en servidores remotos

Necesito integrar una barra de progreso para las operaciones en un servidor remoto a través de SSH.

En mi situación, hay varios bucles que desencadenan procesos en algunos servidores remotos a través de SSH. Estos procesos se activan certainFunctiony tardan entre 10 y 60 minutos (dependiendo de muchas cosas impredecibles). En la medida en que los procesos se controlen desde un servidor principal, me gustaría mostrar alguna barra de progreso basada en el tiempo, como porcentaje o barra (NO puntos o rueda giratoria), que indicaría un progreso general.

es posible?

Buscando alguna solución extravagante encontréprogress-bar.shEl proyecto de Édouard Lópezpara que sea adecuado a mis necesidades.

Aquí está el código para 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
}

¿Se puede utilizar para mi situación? Estoy buscando una solución Bash pura sin instalar paquetes adicionales.

Respuesta1

Escribir una barra de progreso es fácil; ese no es tu problema. Podrías usar

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   "

}

o algo así

El principal problema es determinar cuál es su progreso. Si intentas hacerlo por tiempo, seguramente tendrás una falsa sensación de progreso, porque el proceso (cito): toma entre 10 y 60 minutos (dependiendo de muchas cosas impredecibles).

Si se basa solo en el tiempo, podrías usar:

while [ $progress -lt 100 ] ; do
    progress=$((progress+1))
    prt_bar
    sleep 10
done
echo 
echo done

Pero si no se tiene una medida de cómo están progresando los procesos y no se es capaz de proporcionar una estimación realista del progreso real, es inútil proporcionar una barra de progreso. El widget de reloj de su administrador de ventanas favorito proporcionaría tanta información relevante.

información relacionada