Substituindo o sleep por um belo cronômetro regressivo

Publicado por Fábio Berbert de Paula em 21/08/2013

[ Hits: 8.535 ]

Blog: https://fabio.automatizando.dev

 


Substituindo o sleep por um belo cronômetro regressivo



Hoje me deu vontade de embelezar meu shell script. O programa faz algumas pausas agendadas com o comando sleep antes de seguir para novas tarefas. O problema, é que o comando sleep simplesmente congela a tela e nunca sabemos quanto tempo falta exatamente para o seu fim.

Pesquisando na Internet, encontrei um belo script de cronômetro regressivo:

function countdown
{
        local OLD_IFS="${IFS}"
        IFS=":"
        local ARR=( $1 )
        local SECONDS=$((  (ARR[0] * 60 * 60) + (ARR[1] * 60) + ARR[2]  ))
        local START=$(date +%s)
        local END=$((START + SECONDS))
        local CUR=$START

        while [[ $CUR -lt $END ]]
        do
                CUR=$(date +%s)
                LEFT=$((END-CUR))

                printf "\r%02d:%02d:%02d" \
                         $((LEFT/3600)) $(( (LEFT/60)%60)) $((LEFT%60))

                sleep 1
        done
        IFS="${OLD_IFS}"
        echo "        "
}

countdown $1

Copie o código acima e salve-o no arquivo /usr/local/bin/countdown. Em seguida, torne-o executável:

sudo chmod a+x /usr/local/bin/countdown

Para executá-lo:

countdown 00:01:00

No exemplo acima, estou chamando a contagem regressiva de 1 minuto. Basta manter o formato hh:mm:ss para construir o tempo de cronometragem desejado.

A partir de agora, ao invocar pausa em meus scripts, ao invés de usar sleep, uso o countdown. Muito mais bonito!

Fonte: Display runnning countdown in a bash script? - The UNIX and Linux Forums

Outras dicas deste autor

Como checar se sua placa possui sinal físico de rede

Instalando suporte a flash no Mozilla

Extraindo seu endereço IP com shell script (egrep + awk)

Site de depuração e aprendizado de expressões regulares

pydance, um jogo para quem tem gingado

Leitura recomendada

ITM 6.x - Configurando um Universal Agent(UA) a partir de um script shell coletor

Modem USB Giant D301 - GSM/3G no Ubuntu 8.04

Liberando o acesso a ART NET com iptables

Como contornar o erro -bash: 08: value too great for base (error token is "08")

Políticas personalizadas do SELinux

  

Comentários
[1] Comentário enviado por eldermarco em 21/08/2013 - 07:28h

Gostei. Vou passar a utilizar daqui pra frente. Muito boa ideia!

[2] Comentário enviado por will_drop em 03/01/2014 - 08:18h

Testei o script e não funcionou

[3] Comentário enviado por WillR10 em 08/01/2016 - 14:15h

Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found

[4] Comentário enviado por fabio em 08/01/2016 - 14:45h


[3] Comentário enviado por WillR10 em 08/01/2016 - 14:15h

Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found


Havia um resíduo de código HTML misturado com o código-fonte do script na dica. Corrigido! Pode copiar o código novamente e executar.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts