Saltar al contenido

¿Hay alguna forma de mostrar una cuenta regresiva o un cronómetro en una terminal?

No olvides que en la informática un problema casi siempere suele tener diversas soluciones, no obstante nosotros mostramos lo mejor y más óptimo.

Solución:

No estoy seguro de por qué necesitas beep. Si todo lo que quieres es un cronómetro, puedes hacer esto:

while true; do echo -ne "`date`r"; done

Eso te mostrará los segundos que pasan en tiempo real y puedes detenerlo con Control+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, agregue estas líneas a su ~/.bashrc (la 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 regresiva 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 poder manejar días además de horas, minutos y segundos, podría 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 por favor avíseme si no funciona.

Mi forma favorita es:

Comienzo:

time cat

Detenerse:

ctrl+c

Como @wjandrea comentó a continuación, se debe ejecutar otra versión:

time read

y presiona Enter para 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

Ten en cuenta difundir esta crónica si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 1)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *