Re: unix tool as precise counter/timer for periodic print/exec



Hi Karl,

Perhaps the sleepenh package will help you?

Not a solution per se, but possibly a useful building block..

It works perfectly and was exactly what I was looking for! Thanks a lot!

In case anybody ever finds this thread later on, this is what I now
wrote based on sleepenh which does exactly what I was looking for in my
initial email:

--%<---------------------------------------------------------------------------
#!/bin/sh

usage() {
echo "Usage: $0 [ARGS] [COMMAND]"
echo
echo "It counts upward (default) or downward (-d) starting at START (-s)"
echo "with a configurable floating point interval of SECS seconds (-n,"
echo "default 1.0) until infinity (default) or up to a maximum number of"
echo "COUNT intervals (-c). It optionally prints this counter (-p) and/or"
echo "the current date (-t) at each interval. It optionally executes a"
echo "COMMAND per interval which it can also fork (-f) in case the command"
echo "is expected to take longer than SECS seconds."
echo
echo " -f fork COMMAND"
echo " -p print counter"
echo " -d count downward (default: upward)"
echo " -n SECS interval of SECS (can be floating point)"
echo " -c COUNT only run for COUNT interval(s)"
echo " -s START start counting at START"
echo " -t print the output of date(1) every interval"
echo " -h print this help message"
}

INTERVAL=1.0
MAX_COUNT=-1
DOWN=0
PRINT=0
FORK=0
PRINT_DATE=0
START=0

while getopts fpdn:c:s:th option; do
case $option in
f)
FORK=1
;;
p)
PRINT=1
;;
d)
DOWN=1
;;
n)
INTERVAL="$OPTARG"
;;
c)
MAX_COUNT="$OPTARG"
;;
s)
START="$OPTARG"
;;
t)
PRINT_DATE=1
;;
h)
usage
exit 0
;;
[?])
usage 1>&2
exit 1
;;
esac
done
shift $(($OPTIND - 1))

TIMESTAMP=`sleepenh 0`

I=$START
while true; do
if [ $# -ne 0 ]; then
if [ $FORK -eq 1 ]; then
$@ &
else
$@
fi
fi
if [ $PRINT -eq 1 ]; then
echo $I
if [ $DOWN -eq 0 ]; then
I=$((I+1))
else
I=$((I-1))
fi
fi
if [ $PRINT_DATE -eq 1 ]; then
date
fi
if [ $DOWN -eq 0 ]; then
[ $((I-START)) -gt $MAX_COUNT ] && break
else
[ $((START-I)) -gt $MAX_COUNT ] && break
fi
TIMESTAMP=`sleepenh $TIMESTAMP $INTERVAL`; done

--%<---------------------------------------------------------------------------

Feel free to use the above in any way you want.

cheers, josch


--
To UNSUBSCRIBE, email to debian-user-REQUEST@xxxxxxxxxxxxxxxx
with a subject of "unsubscribe". Trouble? Contact listmaster@xxxxxxxxxxxxxxxx
Archive: 20120502161840.GB15709@hoothoot">http://lists.debian.org/20120502161840.GB15709@hoothoot



Relevant Pages

  • Re: Persisting env vars in cmd windows
    ... more about batch files as you go on, ... echo The time is %time::=.% ... But the piece de resistance was the "start" command, ... echo:: ERROR ERROR ERROR ERROR ...
    (microsoft.public.win2000.general)
  • Re: Persisting env vars in cmd windows
    ... But the piece de resistance was the "start" command, ... - Have all code for the one project in one single batch file. ... @echo off ... echo:: ERROR ERROR ERROR ERROR ...
    (microsoft.public.win2000.general)
  • Re: Persisting env vars in cmd windows
    ... even though it applies to any command, e.g. echo, copy, ... Similarly the syntax for the extremely powerful "for" command ... more about batch files as you go on, ... echo:: ERROR ERROR ERROR ERROR ...
    (microsoft.public.win2000.general)
  • Re: Persisting env vars in cmd windows
    ... even though it applies to any command, e.g. echo, copy, ... Similarly the syntax for the extremely powerful "for" command ... more about batch files as you go on, ... echo:: ERROR ERROR ERROR ERROR ...
    (microsoft.public.win2000.general)
  • Re: Persisting env vars in cmd windows
    ... I open several Command windows in succession. ... Drag the name of C000_CreateSymbols.bat into a new command window ... @echo off ... echo:: ERROR ERROR ERROR ERROR ...
    (microsoft.public.win2000.general)