Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

only run if X seconds have elapsed (time differences in seconds)



I very often find myself wanting to say "Run this command, but only if
it has not been run in the past X seconds.

For example, if I wanted to run something no more often than once per
day, I'd do something like this:

	#!/bin/zsh

	# load this so I can use EPOCHSECONDS
	zmodload zsh/datetime

	# this is a minimum of how many seconds should elapse between runs
	RUN_EVERY=86400

	# this is a text file where the previous timestamp is saved
	LASTRUN=$HOME/.lastrun

	# if there is no LASTRUN file, make it zero
	[[ -e "$LASTRUN" ]] || echo -n 0 > "$LASTRUN"

	# save current time
	NOW=$EPOCHSECONDS

	# get previous time, and strip out anything that is not a digit
	THEN=$(tr -dc '[0-9]' < "$LASTRUN" )

	# get the difference in seconds between NOW and THEN (the last time it was run
	DIFF=$(($NOW - $THEN))

	# if the difference is less than RUN_EVERY then exit
	[[ "$DIFF" -le "$RUN_EVERY" ]] && exit 0

	# if we get here, it's time to run again, so let's update LASTRUN:
	echo -n "$NOW" > $LASTRUN

	# And then I do whatever else the script is supposed to do here


My question is:

Is there an easier / better way to do this than the way that I am
doing it? If so, what would you recommend?

Thanks!

TjL



Messages sorted by: Reverse Date, Date, Thread, Author