我希望脚本进入睡眠状态,除非修改/删除了某个文件(或在某个目录中创建的文件,或者...)。能否以某种优雅的方式实现?我想到的最简单的事情是一个循环,它会休眠一段时间,然后再次检查状态,但是也许有一种更优雅的方法?
我希望脚本进入睡眠状态,除非修改/删除了某个文件(或在某个目录中创建的文件,或者...)。能否以某种优雅的方式实现?我想到的最简单的事情是一个循环,它会休眠一段时间,然后再次检查状态,但是也许有一种更优雅的方法?
Answers:
在Linux上,您可以使用内核的inotify
功能。可以在此处找到脚本编写工具:inotify-tools。
来自Wiki的示例用法:
#!/bin/sh
EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...
确实存在:entr(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
entr
通过任何方式传递已更改的文件的名称?
/_
参数(与$
Perl中的_ 相似)被替换为第一个已更改文件的名称