No estoy seguro de por qué necesita beep
. Si todo lo que quieres es un cronómetro, puedes hacer esto:
while true; do echo -ne "`date`\r"; done
Eso le mostrará los segundos que pasan en tiempo real y puede detenerlo con Ctrl +C . Si necesita mayor precisión, puede usar esto para obtener nanosegundos:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Finalmente, si realmente desea un "formato de cronómetro", donde todo comienza en 0 y comienza a crecer, podría hacer algo como esto:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Para un temporizador de cuenta regresiva (que no es lo que solicitó su pregunta original), puede hacer esto (cambiar los segundos en consecuencia):
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
Puede combinarlos en comandos simples mediante el uso de funciones bash (o el shell que prefiera). En bash, agrega estas líneas a tu ~/.bashrc
(el sleep 0.1
hará que el sistema espere 1/10 de segundo entre cada ejecución para que no envíe spam a su 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
}
A continuación, puede iniciar un temporizador de cuenta atrás de un minuto ejecutando:
countdown 60
Puedes hacer una cuenta regresiva de dos horas con:
countdown $((2*60*60))
o un día entero usando:
countdown $((24*60*60))
E inicia el cronómetro ejecutando:
stopwatch
Si necesita manejar días además de horas, minutos y segundos, puede hacer algo como esto:
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
}
Tenga en cuenta que el stopwatch
La función no se ha probado durante días porque realmente no quería esperar 24 horas para ello. Debería funcionar, pero avíseme si no funciona.
Mi forma favorita es:
Inicio:
time cat
Detener:
ctrl+c
Como @wjandrea comentó a continuación, se ejecutará otra versión:
time read
y presiona Enter
detener
Estaba buscando lo mismo y terminé escribiendo algo más elaborado en Python:
Esto le dará una cuenta regresiva simple de 10 segundos:
sudo pip install termdown
termdown 10
Fuente:https://github.com/trehn/termdown