bash:将多个命令的输出传递给脚本,但仅在满足条件时才执行它们

bash:将多个命令的输出传递给脚本,但仅在满足条件时才执行它们

在各种脚本中,我经常需要生成计算复杂的文件,但如果该文件已经存在,则重用该文件。

我怎样才能创建一个可重用的函数来做到这一点:

  • 检查条件(例如,预生成的文件是否存在并且比源文件更新)
  • 如果满足条件,则输出文件
  • 否则,运行提供的一系列命令来生成它,并将结果保存到文件中以便在将来的运行中重复使用。

理想情况下,使用该函数的代码如下所示:

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
)

相关内容