Bash:如何在文件保存时执行脚本?

5
我希望使用Bash在特定目录中自动运行测试套件,每当我保存任何文件时。
是否有一种机制让Bash在保存事件上执行给定的脚本?
谢谢。
::编辑::
我应该提到我正在使用OSX。
4个回答

5

编辑:你(楼主)提到你使用的是OSX。我不知道在OSX上是否有类似的工具。有一个低级系统调用(从BSD继承而来)叫做“kqueue”,但你需要实现自己的用户级工具。苹果有一个示例应用程序,叫做“Watcher”,但它只是概念证明,并不能满足你的需求。

Stack Overflow上也有另一篇帖子关于这个问题(同样没有定论)。

由于找不到合适的工具,如果你正在使用特定的编程语言,我建议你寻找已经为其编写的解决方案。否则,我认为你只能自己轮询并管理更改...

以下是我原始的基于Linux的答案,供存档之用:

如果你在使用Linux,你可能会想要看一下inotify。更具体地说,你可以安装inotify-tools,其中包括inotifywait
使用它,你可以监视文件和目录的许多事件,例如访问、修改、打开、关闭等。一旦检测到指定的事件,inotifywait就可以退出,因此一个简单的循环就能得到你想要的结果:
while :; do
    inotifywait -e modify /some/directory
    run_test_suite
done

顺便提一下,许多编程语言和环境已经有了自己的持续测试运行器(例如,使用Python时,您可以使用tdaemon等)。

0

你可以使用incron来检测文件何时被关闭。


0

仅在您的系统中没有inotify(linux内核<2.6.13)时使用dnotify。

dnotify是观察目录的标准Linux方法:

http://en.wikipedia.org/wiki/Dnotify

代码示例。监视目录以进行更改:


dnotify WATCH_DIR -M -e SCRIPT_TO_EXECUTE

请注意,每当WATCH_DIR中的任何文件更改时,SCRIPT_TO_EXECUTE将被执行。

2
请参阅此常见问题解答(第四个问题和链接到的页面)。 - Dennis Williamson
dnotify看起来很完美,但我用的是Mac。抱歉,在我的帖子中应该提到这一点。 - Thomas
我应该支持Dennis的观点:不要使用dnotify,而是使用inotify。 - rbp

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接