bash 脚本可以连接到文件吗?

bash 脚本可以连接到文件吗?

我希望脚本休眠,除非修改/删除某个文件(或者在某个目录中创建的文件,或者...)。这可以通过某种优雅的方式实现吗?我想到的最简单的事情是一个循环,在再次检查状态之前休眠一段时间,但也许有更优雅的方法?

答案1

在Linux上,您可以使用内核的inotify功能。可以在那里找到脚本编写工具:inotify 工具

维基百科的使用示例:

#!/bin/sh

EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...

答案2

有一个API叫做inotify对于 C 程序员。

有一些工具使用它,例如因克朗inotify 工具

答案3

确实有:进入(1)当文件更改时将运行任意命令,并且还提供用于重新启动应用程序服务器的自动重新加载选项。

编辑:一些例子

如果源文件更改则重新构建

$ find *.c | entr make

如果文件发生更改,启动并自动重新加载测试服务器

$ ls *.py | entr -r python main.py

提供参数+/path/to/fifo允许通过指示entr将更改为命名管道的每个文件的名称写入更复杂的脚本。以下命令将当前目录中的 Markdown 文件编辑后转换为 HTML

$ ls *.md | entr +/tmp/notify &
$ while read F
> do
>   markdown2html $F
> done < /tmp/notify

相关内容