はじめに
シェルの設定ファイルの時間がかかる初期化処理を、シェルを起動するたびにやらないで欲しいと思って作ったものです。
実装コード
個人的趣味で、POSIX で標準化された範囲の機能だけで実装しています。
: > current.time
if [ ! -e next.time ] || find current.time -newer next.time | grep -q .; then
# ここに処理を書く
echo "do something"
touch -d "$(TZ=UTC-00:05 date +%Y-%m-%dT%H:%M:%SZ)" next.time
fi
こちらは POSIX.1-2024 で新たに標準化された [ ... -nt ... ]
を使って実装したコードです。-nt
はほとんど(すべて?)の POSIX シェルで実装済みのはずです。
: > current.time
if [ ! -e next.time ] || [ current.time -nt next.time ]; then
# ここに処理を書く
echo "do something"
touch -d "$(TZ=UTC-00:05 date +%Y-%m-%dT%H:%M:%SZ)" next.time
fi
簡潔に書けたと思いますが、どうやらこの方法では 24 時間までしか指定できないようです。それ以上のことをやる場合は、以下を併用かな?
追記 ああ、いや、ファイルのタイムスタンプを使う代わりに、Unixタイムをファイルに保存して比較したほうが簡単そうですね。
さいごに
あんまりテストはしていません。
以上