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 certainFunction
y 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.sh
El 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.