Substituindo o sleep por um belo cronômetro regressivo

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

[ Hits: 6.383 ]

Blog: https://fabio.city

 


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

Python Tricks - receba 1 dica de Python por dia no email

sunclock - mais que um simples relógio

Graduação em TI via EAD - Curso gratuito de 600h pela CECIERJ

Baixando sites recursivamente

Como executar seu código-fonte a partir do Vim

Leitura recomendada

Como fazer diff entre duas imagens

FreeBSD - PF + Altq + MRTG

Verificando se um arquivo cabe dentro de um DVD

Testando se a conexão com a internet está ativa

Passagem de parâmetros para funções shell script

  

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