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
Conheça a 4Devs, caixa de ferramentas online para desenvolvedores
Livro: Slackware Linux: Guia Prático
Configurando um drive de CD-RW com interface IDE
Como copiar arquivos do Windows para o Linux
Navegando Livremente: Desabilite o JavaScript e Acesse Conteúdo Restrito (aka paywalls)
Leitura recomendada
Como fazer diff entre duas imagens
Leitura da memória em tempo real
Backup em shell script na virtualização de máquinas (VMWare)
Capturando range de IP via terminal
Shell - operações envolvendo números em ponto flutuante
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