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

Eug*_*ash 2 bash cron

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

我试过memcached,但它似乎不能很好地与 bash 配合使用。

War*_*ung 9

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

# calculate $curval
printf '%s' "$curval" > /var/foo/value.txt
Run Code Online (Sandbox Code Playgroud)

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

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

curval=$(< /var/foo/value.txt)
Run Code Online (Sandbox Code Playgroud)

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

  • 三个问题:您应该引用 `$curval` 以避免 IFS 出现问题,并且您还应该使用 `printf`,因为您无法分辨文件中的内容,因此 `echo` 是不安全的(它可以将任何参数传递给 echo )。此外,当`bash` 可以以`$(&lt;/var/foo/value.txt)` 的形式自行完成时,无需调用外部命令`cat` 将文件读入变量中。 (4认同)