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
)

関連情報