2つのファイルを動的にリンクし、結果を新しいファイルとして参照する方法は?

2つのファイルを動的にリンクし、結果を新しいファイルとして参照する方法は?

staticEntries.dicとDynamicEntries.dicという2つのファイルをリンクしたいです。名前が示すように、staticEntries.dicの内容は時間の経過とともに変わりませんが(一般的な単語を含む)、逆にDynamicEntries.dicは時間の経過とともに変更される可能性があります(データベースから抽出された略語を含む)。私のエディタでは、これら2つのファイルの内容を含むmydict.dicを提供したいと思います。もちろん、シェルを使ってこれを行うことはできますが、作成したmydict.dicに新しいバージョンのDynamicEntries.dicをリンクする前に、mydict.dicファイルのDynamicEntries.dicコンテンツを置き換える必要があります。 ->他の2つのファイルをリンクするコマンドでmydict.dicファイルを作成したいのですが、どうすればいいのかわかりません。私のエディタが実行または呼び出していないため(おそらく)bashコマンドは使用できません。

以下は簡単な例です。

staticEntries.dicの内容

house
dog
horse

DynamicEntries.dicの内容。このコンテンツはデータベースで作成されるため、時間の経過とともに変更される可能性があります。

EGB38
PD
UH7ZT

mydict.dicの追跡コンテンツ

house
dog
horse
EGB38
PD
UH7ZT

シェルを介してその組み合わせを実行すると、新しいバージョンの動的Entries.dicファイルが生成されたときに問題が発生します。 mydict.dicファイルで重複したエントリをどのように回避できますか?それで、リンクされたコマンドをファイルに入れ、それを辞書ファイルとしてエディタに提供できる一般的なファイルとして参照したいと思います。これが可能かどうか、他のアプローチを取るべきかどうかわかりません。

ベストアンサー1

名前付きパイプの背後にあるスクリプトを作成して開いて読み取ると、staticEntries.dicとDynamicEntries.dicの内容をダンプできます。パイプは閉じて再び開くまで出力を終了します。

ただし、スクリプトはバックグラウンドで実行中のままにしておき、ログアウト/ログインまたは再起動後に再起動する必要があります。

さらに重要なのは、これがシェルプログラミング初心者のための作業ではないということです。

時には(通常)最も簡単な解決策が最善です。

より簡単な方法は、mydict.dicを他の2つのファイルに依存して定義するMakefileを作成し、必要に応じてmakeを実行して更新することです。あるいは、シェルスクリプト - Makefileの利点は、cronで実行することもでき、ソースファイルの1つが変更された場合は、ターゲットファイル(mydict.dic)のみを更新することです。

たとえば、

#!/usr/bin/make -f

all: mydict.dic

mydict.dic: staticEntries.dic dynamicEntries.dic
        cat staticEntries.dic dynamicEntries.dic > mydict.dic.tmp
        mv mydict.dic.tmp mydict.dic

行は空白ではなくタブでcat始まります。mv

リンクされたファイルは最初に一時ファイルとして生成され、次に所定の場所に移動されるため、古いファイルを新しいファイルに置き換えることはアトミック操作です。アイデアは、ファイルを使用するたびに完全な古いバージョンまたは完全な新しいバージョンを持つことになりますが、新しいバージョンの部分バージョンは決して持たないことです。

ソース.dicファイルが別のディレクトリにある場合は、ファイルのフルパス名を指定する必要があります。

おすすめ記事