【问题标题】:Bash: Execute script on file save?Bash:在文件保存时执行脚本?
【发布时间】:2011-03-18 00:41:11
【问题描述】:

当我将任何文件保存在给定目录中时,我想使用 Bash 自动运行测试套件。

bash 是否有机制在保存事件时执行给定脚本?

谢谢。

::编辑::

我应该提到我正在使用 OSX。

【问题讨论】:

    标签: unit-testing bash automation shell


    【解决方案1】:

    已编辑:您(OP)提到您使用 OSX。我不知道 OSX 上有任何类似的工具。有一个名为“kqueue”的低级系统调用(继承自 BSD),但您必须实现自己的用户级工具。 Apple 提供了一个示例应用程序,名为“Watcher”,但它只是概念验证,并不能满足您的要求。

    在 Stack Overflow 上有 another thread 关于这个(也没有定论)。

    由于缺少合适的工具,如果您使用特定的编程语言,我建议您寻找已经为它编写的解决方案。否则,我认为您只能自己轮询和管理更改...

    这是我基于 Linux 的原始答案,用于存档目的:

    如果您使用的是 Linux,您可能想看看 inotify 。更具体地说,您可以安装inotify-tools,其中包括inotifywait

    使用它,您可以监视文件和目录中的许多事件,例如访问、修改、打开、关闭等。一旦检测到指定的事件,inotifywait 就可以退出,所以一个简单的循环就可以得到你想要的:

    while :; do
        inotifywait -e modify /some/directory
        run_test_suite
    done
    

    顺便说一句,许多编程语言和环境已经拥有自己的连续测试运行器(例如,对于 Python,您可以使用 tdaemon 等)。

    【讨论】:

      【解决方案2】:

      您可以使用incron 检测文件何时关闭。

      【讨论】:

        【解决方案3】:

        仅当您的系统中没有 inotify 时才使用 dnotify(linux 内核

        dnotify 是监视目录的标准 linux 方法:

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

        代码示例。观察目录的变化:

        
        dnotify WATCH_DIR -M -e SCRIPT_TO_EXECUTE
        

        请注意,当 WATCH_DIR 中的任何文件发生更改时,每次都会执行 SCRIPT_TO_EXECUTE。

        【讨论】:

        • 参见this FAQ(第四个问题及其链接的页面)。
        • dnotify 看起来很完美,除了我在 Mac 上。抱歉,我应该在我的帖子中提到这一点。
        • 我应该支持 Dennis 指出的:不要使用 dnotify,而是使用 inotify。
        【解决方案4】:

        您可以按照此处的说明使用 inotify Inotify Example: Introduction to Inotify with a C Program Example

        【讨论】:

          猜你喜欢
          • 2015-04-07
          • 2013-01-19
          • 2016-09-19
          • 2012-10-22
          • 2011-08-05
          • 2011-11-25
          • 2017-12-04
          • 2016-07-22
          • 2023-03-09
          相关资源
          最近更新 更多