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
Lista de discussão sobre a certificação LPI (Linux Professional Institute)
Trophy, um jogo de corrida de carros muito legal
Evitando vulnerabilidades em seu servidor NFS
Jogando Xadrez através da Internet com o Linux
Catálogo de efeitos de texto para Gimp
Leitura recomendada
Script para adicionar hosts no Nagios
Limpar cache da memória RAM
Leitura da memória em tempo real
Utilizando arrays em shell script
openSUSE - Carregando Script do IPtables no Boot
Comentários
Gostei. Vou passar a utilizar daqui pra frente. Muito boa ideia!
Testei o script e não funcionou
Mensagem
Testei o script e não funcionou
Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found
Mensagem
Comigo também não funcionou.
Erro: /usr/local/bin/countdown: line 17: nbs: command not found
[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.
Mensagem
[quote]
[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[/quote]
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
Enviar