Tout d'abord:
$ set | grep -i sh.*version
BASH_VERSION='2.05a.0(1)-release'
Pour calculer un nombre de secondes, deux m�thodes:
$ echo $((((24+3)*60+46)*60+40))
100000
$ date -ud '1970-1-1 UTC +1 day 3 hour 46 min 40 secs' +%s
100000
L'op�ration inverse:
$ date -ud '1970-1-1 UTC +100000 secs' +%j-%T
002-03:46:40
(Ne pas oublier d'enlever 1 jour,
cela ne fonctionne plus apr�s 365jours;)
ou alors:
$ echo $(( 100000 / 86400 )) day $(( 100000 % 86400 / 3600 )) hour \
$(( 100000 % 3600 /60 )) min $(( 100000 % 60 )) secs
1 day 3 hour 46 min 40 secs
Pour calculer un ``sleep'' qui arrive sur les prochaines 5 minutes:
$ delay=$(date -ud '1970-1-1 UTC +5 min' +%s)
D'abord le d�callage sur les 5 minutes arrondies:
$ offset=$(( ($(date +%s) - SECONDS) % delay ));
Enfin le nombre de secondes � attendre avant les prochaines
5 minutes arrondies:
$ sleep $(( delay - ( SECONDS + offset ) % delay ));date
Fri Jan 21 19:40:00 CET 2005
ou sans attendre:
$ date -d "now + $(( delay - ( SECONDS + offset ) % delay )) secs"
Fri Jan 21 19:40:00 CET 2005
Maintenant, on peut aussi le faire avec CRON:
$ sleep $((9**9)) & # une bonne douzaine d'ann�es
$ echo kill $! | at "now +$(( delay/60 - ( SECONDS + offset ) % delay /60 ))
min"
warning: commands will be executed using /bin/sh
job 344 at 2005-01-21 19:40
pts/16|[EMAIL PROTECTED] fg;date
sleep $((9**9))
Terminated
ven jan 21 19:40:00 CET 2005
Amusez-vous bien.
--
F�lix Hauri - <[EMAIL PROTECTED]> - http://www.f-hauri.ch
_______________________________________________
gull mailing list
[email protected]
http://lists.alphanet.ch/mailman/listinfo/gull