如何动态连接两个文件并将结果作为新文件引用?

str*_*rry 6 shell-script files

我想连接两个文件,即 staticEntries.dic 和 dynamicEntries.dic。正如名称所示,staticEntries.dic 的内容随时间保持不变(包含常用词),但相反,dynamicEntries.dic 可能会随时间变化(包含从 DB 中提取的缩写)。在我的编辑器中,我想提供一个 mydict.dic,其中包含两个文件的内容。当然,我可以通过 Shell 做到这一点,但是在将新版本的 dynamicEntries.dic 连接到生成的 mydict.dic 之前,我必须替换 mydict.dic 文件中的 dynamicEntries.dic 内容。-> 我想创建一个 mydict.dic 文件,其中包含连接另外两个文件的命令,但我不知道该怎么做。由于它没有被我的编辑器执行或调用(我猜),我不能使用 bash 命令。

随后是一个简单的例子:

staticEntries.dic 的内容

house
dog
horse
Run Code Online (Sandbox Code Playgroud)

dynamicEntries.dic 的内容。此内容是基于数据库生成的,因此会随着时间而变化。

EGB38
PD
UH7ZT
Run Code Online (Sandbox Code Playgroud)

追求 mydict.dic 的内容

house
dog
horse
EGB38
PD
UH7ZT
Run Code Online (Sandbox Code Playgroud)

如果我通过 shell 进行这种组合,如果生成文件 dynamicEntries.dic 的新版本,我会遇到问题:如何避免 mydict.dic 文件中的重复条目?所以我想把连接命令放在一个文件中,并将它作为一个普通文件引用,我可以作为字典文件提供给我的编辑器。我不知道这是否可行,或者我是否必须应用另一种方法。

cas*_*cas 8

您可以编写一个位于命名管道后面的脚本,并在它打开和读取时转储 staticEntries.dic 和 dynamicEntries.dic 的内容。注意管道正在关闭并终止输出,直到它再次打开。

但是您必须让该脚本在后台运行,并记住在注销/登录或重新启动后再次启动它。

更重要的是,它不是一个新手shell编程任务。

有时(通常),最简单的解决方案是最好的。

创建一个定义 mydict.dic 依赖于其他两个文件的 Makefile 并记住在需要时运行 make 来更新它要简单得多。或者只是一个 shell 脚本——Makefile 的优点是你也可以从 cron 运行它,并且它只会在任何一个源文件发生更改时更新目标文件 (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
Run Code Online (Sandbox Code Playgroud)

以制表符开头的行,catmv不是空格。

连接文件首先创建为临时文件,然后移动到位,因此用新文件替换旧文件是一个原子操作。这样做是为了无论何时使用该文件,您都会拥有完整的旧版本或完整的新版本,但永远不会有新版本的部分版本。

如果源 .dic 文件位于不同的目录中,则需要指定文件的完整路径名。