Comme mentionné par Outlaw Programmer, je pense que la solution est simplement de dormir pendant le nombre correct de secondes.
Pour ce faire en bash, faites ce qui suit:
current_epoch=$(date +%s)
target_epoch=$(date -d '01/01/2010 12:00' +%s)
sleep_seconds=$(( $target_epoch - $current_epoch ))
sleep $sleep_seconds
Pour ajouter une précision jusqu'aux nanosecondes (effectivement plus proche des millisecondes) utilisez par exemple cette syntaxe:
current_epoch=$(date +%s.%N)
target_epoch=$(date -d "20:25:00.12345" +%s.%N)
sleep_seconds=$(echo "$target_epoch - $current_epoch"|bc)
sleep $sleep_seconds
Notez que macOS / OS X ne prend pas en charge la précision en dessous des secondes, vous devriez utiliser coreutils
de brew
à la place → voir ces instructions
2 votes
Veuillez noter que la solution qui utilise simplement un long sleep suivi d'un calcul peut dormir trop longtemps, peut-être beaucoup trop longtemps, surtout si vous avez une machine qui peut hiberner. La commande de sommeil posix ne garantit pas de ne pas dormir trop longtemps. La solution de @Camusensei aborde très bien cette préoccupation.