与えられたファイルと共通の部分を持つテキストファイル

与えられたファイルと共通の部分を持つテキストファイル

別のファイルから抽出されたセクションがあるディレクトリに保存されているプレーンテキストファイルのセットを保持する必要があります。例は次のとおりです。

文書:

/directory/textfile1 (every other file in the directory needs to "include" the
                      full contents of this file, each file can do so at a
                      different starting position; this file changes often      )
/directory/textfile2 ("includes" textfile1 after a few lines from the top       )
/directory/textfile3 ("includes" textfile1 as a header                          )
/directory/textfile4 ("includes" textfile1 as a footer                          )

textfile1を変更した後、ファイルシステムの読み取りヒットtextfile {2..4}にtextfile1の新しいコンテンツを含む更新版を返すようにしたいと思います。

Webサーバーでは、従来のサーバーサイドインクルードディレクティブを使用してこの問題を解決できます。これで、フロントエンドサービスを実行せずにこれをどのように実行できますか?

他のinodeを指すのではなく、カスタム「再解析ポイント」を定義するのと同じように、いくつかのカスタムコードを実行してstdoutをファイルの内容として表示するシンボリックリンクを作成できますか?

たとえば、仮想の「symlink」は textfile3 ファイルに対して次のコマンドを実行します。

cat /directory/textfile1 /directory/textfile3_static

これは、コンテンツがtextfile1に依存する静的ファイルの存在をシミュレートします。

私は、特別なマウントポイントやそれに似たもの用のカスタムFUSEモジュールを作成するよりも最小限のカスタマイズを使用するソリューションを探しています。

私はここで間違った方向に考えることができます。 textfile1が変更されるたびにプレースホルダを置き換えるために更新スクリプトを起動する方が簡単かもしれません。ポーリングなしでこのイベントをどのようにキャプチャできますか?

以下は、いくつかのサンプルテキストファイルです。

コンテンツ:

/directory/textfile1:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
--------------------------------------------------------------------------------

/directory/textfile2:
--------------------------------------------------------------------------------
Juny tu hai un cervellone
quasi tutto sai
Ma quando fai un'invenzione
sono sempre guai
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa
--------------------------------------------------------------------------------

/directory/textfile3:
--------------------------------------------------------------------------------
Ferma non stai sei come un ciclone
e non dormi mai
Il centauro Nico ami già
ma lui forse non lo sa

Come sempre insisterai
allora che pasticci tu di nuovo farai
--------------------------------------------------------------------------------

...など。 :)

ベストアンサー1

どういうわけか@polynomialの答えは、次のように翻訳されますbash

#!/bin/bash

if [[ ! -e textfile2 ]]; then
  mkfifo textfile2
fi

while true; do
  (
    exec >textfile2
    cat textfile2-header
    cat textfile1
    cat textfile2-footer
  )
done

おすすめ記事