如何在 Bash 中“缓存”变量?

如何在 Bash 中“缓存”变量?

我有一个 bash 脚本,每 10m 运行一次cron。该脚本对某些值执行昂贵的计算(例如变量 x=值)。我需要将此值“缓存”2-3 小时。这个问题有哪些可能的解决方案?

我试过内存缓存但它似乎与 bash 配合得不好。

答案1

编写第二个脚本来执行实际计算并将结果保存到文件中:

# calculate $curval
printf '%s' "$curval" > /var/foo/value.txt

安排它cron每 2-3 小时运行一次。

在“每 10 分钟”脚本中,只需从文件中读取当前值:

curval=$(< /var/foo/value.txt)

value.txt一个很好的改进是,如果文件尚不存在,则从“每 10 分钟”脚本调用计算脚本。crontab如果条目丢失,您甚至可以让它添加该条目。

答案2

我同意将结果写入文件,在文件中设置变量

curval=the_value

然后在shell(或另一个脚本)中

source current_variable_value_result_file

答案3

您可以将变量存储在简单的纯文本文件中。

我为此使用了两个 bash 函数:

# the cache file in /tmp
CACHE_FILE="/tmp/your-file.txt"
touch "$CACHE_FILE"

# Set a cache/key value in your text file us `=` as separator
function set_cache() {
  echo -e "$1=$2" >> "$CACHE_FILE"
}

# grep the key in the cache file and extract the value using awk
function get_cache() {
  grep -F "$1" "$CACHE_FILE" | awk -F"=" '{print $2}'
}

它远非完美,如果您的密钥包含您选择的分隔符值(此处),它就不起作用=,但这是一个良好的开始,对我帮助很大。

我猜想第二个 cron 作业可以定期删除缓存文件。

相关内容