在各种脚本中,我经常需要生成计算复杂的文件,但如果该文件已经存在,则重用该文件。
我怎样才能创建一个可重用的函数来做到这一点:
- 检查条件(例如,预生成的文件是否存在并且比源文件更新)
- 如果满足条件,则输出文件
- 否则,运行提供的一系列命令来生成它,并将结果保存到文件中以便在将来的运行中重复使用。
理想情况下,使用该函数的代码如下所示:
if_needs_update_then_generate_into <condition> <generated_filename> \
(
sequence
of
commands
generating
the
file
)
即我不喜欢为生成创建一个单独的函数,因为它会影响可读性;
我尝试了以下方法,但在 CentOS 下它总是为“长命令序列”创建一个单独的进程,即使预生成的文件已经存在并且实际上已被重用。该过程永远不会结束并继续使用 RAM:
function if_needs_update_then_generate_into()
{
condition="$1"
pregenerated="$2"
if condition; then
cat |
tee "$pregenerated"
else
cat "$pregenerated"
fi
}
我喜欢它的地方是它的用法看起来就像我所需要的:
if_needs_update_then_generate_into \
condition \
pregenerated \
< <(
sequence
of
commands
generating
the
file
)