Não sei por que você precisa de beep
, se tudo que você quer é um cronômetro, você pode fazer isso:
while true; do echo -ne "'date'\r"; done
Isso mostrará os segundos passando em tempo real e você pode pará-lo com Ctrl + C . Se você precisar de maior precisão, poderá usar isso para fornecer nanossegundos:
while true; do echo -ne "'date +%H:%M:%S:%N'\r"; done
Finalmente, se você realmente quer "formato de cronômetro", onde tudo começa em 0 e começa a crescer, você pode fazer algo assim:
date1='date +%s'; while true; do
echo -ne "$(date -u --date @$(('date +%s' - $date1)) +%H:%M:%S)\r";
done
Para um cronômetro de contagem regressiva (que não é o que sua pergunta original pediu), você poderia fazer isso (mudar segundos de acordo):
seconds=20; date1=$(('date +%s' + $seconds));
while [ "$date1" -ge 'date +%s' ]; do
echo -ne "$(date -u --date @$(($date1 - 'date +%s' )) +%H:%M:%S)\r";
done
Você pode combiná-los em comandos simples usando as funções bash (ou qualquer que seja a sua preferência). No bash, adicione essas linhas ao seu ~/.bashrc
(o sleep 0.1
fará o sistema esperar por 1/10 de segundo entre cada execução, para que você não envie spam à sua CPU):
function countdown(){
date1=$(('date +%s' + $1));
while [ "$date1" -ge 'date +%s' ]; do
echo -ne "$(date -u --date @$(($date1 - 'date +%s')) +%H:%M:%S)\r";
sleep 0.1
done
}
function stopwatch(){
date1='date +%s';
while true; do
echo -ne "$(date -u --date @$(('date +%s' - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Você pode então iniciar uma contagem regressiva de um minuto executando:
countdown 60
Você pode fazer uma contagem regressiva de duas horas com:
countdown $((2*60*60))
ou um dia inteiro usando:
countdown $((24*60*60))
Inicie o cronômetro executando:
stopwatch
Se você precisar lidar com dias, horas, minutos e segundos, faça algo assim:
countdown(){
date1=$(('date +%s' + $1));
while [ "$date1" -ge 'date +%s' ]; do
## Is this more than 24h away?
days=$(($(($(( $date1 - $(date +%s))) * 1 ))/86400))
echo -ne "$days day(s) and $(date -u --date @$(($date1 - 'date +%s')) +%H:%M:%S)\r";
sleep 0.1
done
}
stopwatch(){
date1='date +%s';
while true; do
days=$(( $(($(date +%s) - date1)) / 86400 ))
echo -ne "$days day(s) and $(date -u --date @$(('date +%s' - $date1)) +%H:%M:%S)\r";
sleep 0.1
done
}
Observe que a função stopwatch
não foi testada há dias, pois eu realmente não queria esperar 24 horas por isso. Deve funcionar, mas por favor me avise se isso não acontecer.