Preciso integrar uma barra de progresso às operações no servidor remoto por SSH.
Na minha situação, existem vários loops que acionam processos em alguns servidores remotos via SSH. Esses processos estão sendo acionados certainFunction
e levam de 10 a 60 minutos (dependendo de muitas coisas imprevisíveis). Na medida em que os processos são controlados a partir de um servidor principal, gostaria de exibir alguma barra de progresso com base no tempo, como porcentagem ou barra (NÃO pontos ou girador), que indicaria um progresso geral.
Isso é possível?
Procurando por alguma solução extravagante que encontreiprogress-bar.sh
O projeto de Édouard Lópezpara ser adequado às minhas necessidades.
Aqui está o 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
}
Pode ser usado para minha situação? Estou procurando uma solução Bash pura, sem a instalação de pacotes adicionais.
Responder1
Escrever uma barra de progresso é fácil; esse não é o seu problema. Você poderia 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 "
}
ou algo assim
O principal problema é determinar qual é o seu progresso. Se você tentar fazer isso na hora certa, certamente terá uma falsa sensação de progresso, porque o processo (cito): leva de 10 a 60 minutos (dependendo de muitas coisas imprevisíveis).
Se for apenas baseado no tempo, você poderia usar:
while [ $progress -lt 100 ] ; do
progress=$((progress+1))
prt_bar
sleep 10
done
echo
echo done
Mas se não tivermos uma medida de como os processos estão a progredir e não formos capazes de fornecer uma estimativa realista do progresso real, é inútil fornecer uma barra de progresso. O widget de relógio do seu gerenciador de janelas favorito forneceria o máximo de informações relevantes.