Substituindo o sleep por um belo cronômetro regressivo

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

[ Hits: 6.399 ]

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

Lançamento do TupiServer Linux 1.0

Como descobrir a velocidade de sua placa de rede via linha de comando

TEG - Clone do WAR de tabuleiro para GNU/Linux

O comando mkpasswd

Como validar arquivos RSS via linha de comando

Leitura recomendada

Sockets em shell script

Bloqueando Facebook com IPtables (de forma fácil, intuitiva e eficiente)

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

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

Resoveldo problema com proxy no Conectividade Social

  

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
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts