Cria a função para exibir o progresso da execução e substituir a linha no acabamento

0

Gostaria de mostrar que uma etapa de instalação ainda está em andamento. Então, adicionarei um ponto a cada segundo à linha atual.

É possível fazer uma função para isso, então eu posso adicionar esta função de progresso a cada etapa da instalação?

#!/bin/bash
echo "Step 1: Apt-get update"
while :;do echo -n .;sleep 1;done &
trap "kill $!" EXIT
sudo apt-get update 2>&1 >/dev/null
kill $! && trap " " EXIT

echo "Step 2: Apt-get upgrade"
sudo apt-get upgrade -y 2>&1 >/dev/null
# Also show progress

E se o progresso tiver terminado, gostaria de substituir a linha atual por

Step 1: Apt-get update finished

O próximo passo será executado ...

    
por user3142695 14.02.2017 / 07:03

1 resposta

0

Se você puder manter todas as informações de progresso na mesma linha, use \r para isso:

#!/bin/bash

echo -n "Step 1: Apt-get update"
while :;do echo -n .;sleep 1;done &
trap "kill $!" EXIT
sudo apt-get update 2>&1 >/dev/null
kill $! && trap " " EXIT
echo -e "\rStep 1: Apt-get update finished"

Isso exibe os períodos na mesma linha como "Etapa 1 ..." e, em seguida, substitui a linha pela mensagem "concluído". Pode ser necessário adicionar espaços dentro das aspas depois de "terminado" para cobrir todos os pontos; você também pode querer contar os pontos e evitar quebra de linha (mantendo o controle de quanto você tem saída em comparação com $COLUMNS ).

É altamente recomendável que você registre a saída de apt-get em um arquivo, em vez de descartá-lo totalmente. Especialmente no caso upgrade , você precisará da saída para solucionar quaisquer erros que possam acontecer ...

Uma abordagem mais fácil seria usar apt em vez de apt-get : exibe barras de progresso agradáveis e as remove de maneira limpa quando terminar.

    
por 14.02.2017 / 08:23