Je ne sais pas pourquoi vous avez besoin de beep
, si tout ce que vous voulez c'est un chronomètre, vous pouvez le faire :
while true; do echo -ne "`date`\r"; done
Cela vous montrera les secondes qui passent en temps réel et vous pourrez l'arrêter avec Ctrl+C. Si vous avez besoin d'une plus grande précision, vous pouvez l'utiliser pour vous donner des nanosecondes :
while true; do echo -ne "`date +%H:%M:%S:%N`\r"; done
Enfin, si vous voulez vraiment, vraiment le “format chronomètre”, où tout commence à 0 et commence à grandir, vous pouvez faire quelque chose comme ça :
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done
Pour un compte à rebours (ce qui n'est pas ce que votre question initiale demandait), vous pourriez faire ceci (changer les secondes en conséquence) :
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
Vous pouvez combiner tout cela en commandes simples en utilisant les fonctions bash (ou n'importe quel shell que vous préférez). Dans bash, ajoutez ces lignes à votre ~/.bashrc
(le sleep 0.1
fera attendre le système pendant 1/10e de seconde entre chaque exécution afin de ne pas spammer votre 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
}
Vous pouvez alors lancer un compte à rebours d'une minute en exécutant :
countdown 60
Vous pouvez faire un compte à rebours de deux heures avec :
countdown $((2*60*60))
ou une journée entière en utilisant
countdown $((24*60*60))
Et lancer le chronomètre en faisant :
stopwatch
Si vous devez être capable de gérer les jours aussi bien que les heures, les minutes et les secondes, vous pouvez faire quelque chose comme ça :
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
}
_Notez que la fonction stopwatch
n'a pas été testée depuis des jours car je ne voulais pas vraiment attendre 24 heures. Elle devrait fonctionner, mais faites-moi savoir si ce n'est pas le cas.