Non sono sicuro del motivo per cui hai bisogno di beep
. Se tutto quello che vuoi è un cronometro, puoi farlo:
while true; do echo -ne "`date`\r"; done
Questo ti mostrerà i secondi che passano in tempo reale e puoi fermarlo con Ctrl +C . Se hai bisogno di maggiore precisione, puoi usarlo per darti nanosecondi:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Infine, se vuoi davvero un "formato cronometro", dove tutto inizia da 0 e inizia a crescere, potresti fare qualcosa del genere:
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Per un timer per il conto alla rovescia (che non è quello richiesto dalla tua domanda originale) potresti fare questo (cambia i secondi di conseguenza):
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
Puoi combinarli in semplici comandi usando le funzioni bash (o qualsiasi altra shell tu preferisca). In bash, aggiungi queste righe al tuo ~/.bashrc
(il sleep 0.1
farà attendere al sistema 1/10 di secondo tra ogni esecuzione in modo da non inviare spam alla 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
}
Puoi quindi avviare un conto alla rovescia di un minuto eseguendo:
countdown 60
Puoi fare il conto alla rovescia di due ore con:
countdown $((2*60*60))
o un'intera giornata utilizzando:
countdown $((24*60*60))
E avvia il cronometro eseguendo:
stopwatch
Se devi essere in grado di gestire giorni, ore, minuti e secondi, potresti fare qualcosa del genere:
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
}
Notare che stopwatch
la funzione non è stata testata per giorni poiché non volevo davvero aspettare 24 ore per questo. Dovrebbe funzionare, ma in caso contrario fammi sapere.
Il mio modo preferito è:
Inizio:
time cat
Stop:
ctrl+c
Come @wjandrea ha commentato di seguito, deve essere eseguita un'altra versione:
time read
e premi Enter
fermarsi
Stavo cercando la stessa cosa e ho finito per scrivere qualcosa di più elaborato in Python:
Questo ti darà un semplice conto alla rovescia di 10 secondi:
sudo pip install termdown
termdown 10
Fonte:https://github.com/trehn/termdown