Bashで変更可能なバッファを開いて保持する方法

Bashで変更可能なバッファを開いて保持する方法

私は現在、configsディレクトリからさまざまな設定を取得する小さなテンプレートシステムを実装するために複数の機能を使用するスクリプトを持っています。私はこれがbashスクリプトのより広範な使用であることを知っており、ほとんどの人はそこでPythonや他のスクリプト言語を使用するよう強制します。質問について:

こんな機能が多いですね

a() {}
b() {}
c() {}
...

私が望むのは、オープンバッファを含むグローバル定数を定義することです。これにより、これらの関数の1つが読み取りループを介して構成の変更を開始したときに、同じ# % filename.to.use.as.a.template.conf % #バッファーを引き続き使用しながら、テンプレートシステムを担当する他の関数(formatを使用)にいくつかのロジックを渡すことができます。一時ファイルを作成し、そこに設定を書き込むことができることを知っています。最初その後、オーバーライドを使用しますmvが、これを避けたいと思います。

理想的には、論理フローは次のようになります。

関数「A」は、構成に対していくつかの論理処理を実行し、「#%example.conf%#」タグを見つけて、バッファを見つけるためのテンプレートのロードを担当する関数「B」を呼び出します。関数 "A" はテンプレート コンテンツ "example.conf" を処理し、バッファに追加し、それを再び "A" に渡します。次に、挿入されたテキストの最後に移動してファイルの解析を続けます。

擬似コードの実装例:


install_template() {
  local TEMPLATE_FILE
  TEMPLATE_FILE = "${1}"
  write_to_buffer "$(cat "${TEMPLATE_FILE}")" # This where I'm hung up at :/
}


while read -r line; do
  if [[ line = *#*%*%*#*]]; then
    install_template "${line}"
  fi
done < "${CONFIGURATION}" > "${SOME_BUFFER}"

上記の擬似コードの問題は、できるecho関数ではcatの出力が表示されますが、問題は私のechoが読み取りループによってキャプチャされバッファに出力されることです。理想的には、それなしでinstall_templateログを続けることができます。STDOUTみんな読み取りループにかかりました。

これを行う良い方法はありますか?それとも、少なくともグローバル変数やキャプチャせずにバッファに書き込む他の関数を介して作業しているバッファAを追跡する方法はありますかSTDOUT

ベストアンサー1

おすすめ記事