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

Répondre à