Non sono sicuro del perché tu abbia bisogno di beep
, se tutto quello che vuoi è un cronometro, puoi fare così:
while true; do echo -ne "`date`\r"; done
Che vi mostrerà i secondi che passano in tempo reale e potete fermarlo con Ctrl+C. Se avete bisogno di maggiore precisione, potete usare questo per darvi i nanosecondi:
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Infine, se volete davvero, davvero il “formato cronometro”, dove tutto parte da 0 e inizia a crescere, potreste fare qualcosa come questo:
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 che la tua domanda originale chiedeva) potresti fare così (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 combinare questi in semplici comandi usando le funzioni di bash (o qualsiasi shell tu preferisca). In bash, aggiungete queste linee al vostro ~/.bashrc
(lo sleep 0.1
farà attendere il sistema per 1/10 di secondo tra ogni esecuzione in modo da non spammare la 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 timer per il conto alla rovescia di un minuto eseguendo:
countdown 60
Puoi fare un conto alla rovescia di due ore con:
countdown $((2*60*60))
o un giorno intero usando:
countdown $((24*60*60))
E avviare il cronometro eseguendo:
stopwatch
Se avete bisogno di poter gestire i giorni oltre a ore, minuti e secondi, potreste 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
}
Nota che la funzione stopwatch
non è stata testata per i giorni poiché non volevo aspettare 24 ore. Dovrebbe funzionare, ma per favore fatemi sapere se non funziona.