Para un temporizador bash, uso este código:
#!/bin/bash
sek=60
echo "60 Seconds Wait!"
echo -n "One Moment please "
while [ $sek -ge 1 ]
do
echo -n "$sek "
sleep 1
sek=$[$sek-1]
done
echo
echo "ready!"
Eso me da algo asi
One Moment please: 60 59 58 57 56 55 ...
¿Existe la posibilidad de reemplazar el último valor de segundo por el más reciente para que la salida no genere un gran rastro sino la cuenta regresiva de segundos como un tiempo real en una posición? (Espero que entiendas lo que quiero decir :))

watchcomando, aunque no estoy seguro de cómo hacerlo.Respuestas:
fuente
\r. Mira mi respuesta.The old format $[expression] is deprecated and will be removed in upcoming versions of bash.. Utilice el POSIX$((expression))o el((comando en su lugar. Por ejemplo,sek=$(( sek - 1 ))or(( sek = sek - 1 ))o(( sek-- )).Básicamente es lo mismo que la respuesta de aneeshep, pero usa Return (
\r) en lugar de Retroceso (\b) porque no sabemos si la longitud siempre será la misma, por ejemplo, cuándo$sek < 10.Además, el primero
echodebe usar$sek, no código duro60.Finalmente, observe el espacio después de
....fuente
Con bash puedes usar la variable especial
SECONDS.fuente
SECONDSEsta variable se expande a la cantidad de segundos desde que se inició el shell. (así que probablemente no lo establecería en 0 ... soloAdemás de
\ro se\bacerca, es posible usar el\033[2Kcarácter de control , que le dice al terminal que limpie toda la línea. La ventaja de esto en comparación con\bes que no tiene que hacer coincidir el número\bcon la cantidad de caracteres que desea eliminar, y en comparación\rno habrá caracteres sobresaliendo en la pantalla si la nueva línea es más corta que la anterior uno.A continuación se muestra el ejemplo de cómo se puede aplicar a esta pregunta, y aquí hay un ejemplo de la aplicación relacionada para crear resultados similares a los mensajes de arranque. En este ejemplo en particular, el temporizador desaparecerá una vez que se alcance el segundo segundo y la línea del temporizador se reemplazará con "¡Listo!" frase.
Otra alternativa sería emplear el
dialogcomando para crear cuadros de diálogo simples en la línea de comandos. El cuadro de diálogo permanecerá en la pantalla mientras dure el temporizador y se actualizará con el bucle, y para cuando termine, el temporizador se reemplazará con el mensaje "¡Listo! Presione para salir" de manera transparente:fuente
dialogno existe en mac: /Esto es lo que se me ocurrió después de leer aquí y un poco más, el único revestimiento:
Más legible:
Donde SEC se puede establecer en cualquier número entero positivo y printf se encargará del relleno apropiado. Probado bajo Ubuntu y cygwin.
fuente
Puede lograrlo colocando el retorno de carro
\r.En una sola línea de código, es posible con
echo -neo con
printffuente
Contador regresivo:
y el cronómetro 'normal' es:
control + c para detener
fuente