将读取/写入文件映射到从脚本获取输出/将输入发送到脚本?

将读取/写入文件映射到从脚本获取输出/将输入发送到脚本?

假设我有两个脚本,script1.sh并且script2.sh.我想知道是否有一种方法可以创建一个文件系统接口,例如,我可以vim file 运行我的系统script1.sh并在编辑器中获得脚本的输出。然后,当我写入文件时,系统会将修改后的文本作为管道输入发送到script2.sh.

这可能吗?我研究过使用“inotify”,它可以在文件更改时运行我想要的脚本。但我还没有弄清楚如何执行第一部分,其中打开文件本身只是从某些脚本获取标准输出。

答案1

这项工作的工具是保险丝(FUSE 代表 USerspace 中的文件系统)。 FUSE 允许用户程序实现文件系统。如果您在 FUSE 文件系统上运行vim filefile那么提供文件系统的程序将在 Vim 读取文件时生成文件内容,并在 Vim 保存文件时存储(或不存储!)内容。

FUSE 比你要求的更复杂。提供文件系统的程序不仅管理文件的内容,还管理目录结构、权限等。它还需要管理每个文件的一块块的读写,除非你使文件不可查找(这会限制程序)这可以对他们起作用)。

我不知道有任何基于 FUSE 构建的项目只提供一个操作文件内容的接口,同时提供经典的目录结构。您可以从一些示例文件系统中复制代码。

答案2

这个 shell 函数将执行您所要求的操作:

vim() { bash script1.sh <"$1" >"$1.hide~"; /usr/bin/vim "$1.hide~"; bash script2.sh <"$1.hide~"; }

使用该函数如下:

vim file

将其分解为几部分:

  • bash script1.sh <"$1" >"$1.hide~"

    $1是您提供给脚本的第一个参数,它应该是文件名。它'script1.sh在其标准输入上使用该文件运行,并将输出写入临时文件。

  • /usr/bin/vim "$1.hide~"

    vim这在 的输出上运行实数script1.sh

    这假设vim您系统上的编辑器位于/usr/bin.如果它位于其他地方,请适当调整函数定义。

  • bash script2.sh <"$1.hide~"

    这将编辑后的文件作为标准输入提供script2.sh

要使此函数定义永久存在,请将其作为单独的行放在~/.bashrc文件中。

相关内容