From: martin f. krafft Date: Thu, 1 Mar 2018 02:47:04 +0000 (+1300) Subject: provide run_at_most_every function X-Git-Url: https://git.madduck.net/etc/zsh.git/commitdiff_plain/8375a5c6acd872547e7f2236a5a9f55dd04ac791?ds=inline;hp=59aba6c965455891a22e8ea22f561854e43903bd provide run_at_most_every function --- diff --git a/.zsh/util b/.zsh/util index 422dba9..9b86536 100644 --- a/.zsh/util +++ b/.zsh/util @@ -30,4 +30,24 @@ array_append() { function trace() { ( eval "set -x; $@"; ) } +function run_at_most_every() { + local timespec= + case "$1" in + ((#b)([0-9]##)([smhd])) timespec="${match[2]}-${match[1]}";; + (*) + zerror "missing timespec: $@" + return + esac + shift + + local sentinel_dir="${XDG_RUNTIME_DIR:-${TMPDIR:-/tmp}}/run_at_most_once_per" + mkdir --parent "${sentinel_dir}" + local sentinel="${sentinel_dir}/${*//[^[:alnum:]]##/_}_${timespec}" + if test -z ${sentinel}(#qNm${timespec}); then + touch "${sentinel}" + $@ + return $? + fi +} + # vim:ft=zsh