Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: othersrc/usr.bin/sleepto
Date: Fri, 26 Feb 2021 16:42:37 +1100
From: Simon Burge <simonb%NetBSD.org@localhost>
Message-ID: <20210226054237.6B07D4E23A%thoreau.thistledown.com.au@localhost>
| Thinking about adding this to our existing sleep(1), so anything
| in existing libraries that makes this (much!) easier is welcome.
I use the following sh function as my sleep command, it does what
I need, and the advantage of being a function, rather than compiled
code, is that it is trivial to change if what it does isn't quite what
someone else needs. It uses "date -d" (and so, parsedate(3)) for its
input parsing, and can be used as a conventional sleep command (simply
exec's sleep) or as "sleep until sometime+date+offset" where the latter
is whatever parsedate allows (as 1 or more args to the function).
kre
sleep()
{
case "$1" in
until) ;;
*) command sleep "$@"; return;;
esac
shift
case "$#" in
0) printf >&2 '%s\n' "Usage: sleep until date+time"; return 1;;
esac
local NOW=$(date +%s)
local THEN; THEN=$(date -d "$*" +%s) || return 1
local DELAY=$(( THEN - NOW ))
case ${DELAY} in
-*) local HN=$(date -r "${NOW}" +%H)
local HT=$(date -r "${THEN}" +%H)
if [ "${HN#0}" -ge 14 ] && [ "${HT#0}" -le 6 ]
then
THEN=$(date -d "$* tomorrow" +%s) || return 1
DELAY=$(( THEN - NOW ))
fi
esac
case ${DELAY} in
-*) printf >&2 '%s\n' "In the past: $*"; return 1;;
0) return 0;;
*) command sleep "${DELAY}";;
esac
}
Home |
Main Index |
Thread Index |
Old Index