【问题标题】:linux (and OSX) shell command to execute every time file is saved每次保存文件时执行的linux(和OSX)shell命令
【发布时间】:2011-08-05 21:39:15
【问题描述】:

我试图让 jsdoc 在我保存我的 javascript 文件时自动生成。我有一个工作脚本,它存储文件的最后更新时间(当前是硬编码的)并与该文件的当前时间戳进行比较。我在一个 while 循环中运行它,直到按下 CTRL-C 为止,并插入 0.1 秒的睡眠以停止消耗处理器。

这是工作脚本:

while :
do

if [ $(( lastTime )) -ne `stat -f %m -t %s javascript.js` ]
then
        lastTime=`stat -f %m -t %s javascript.js`
        # custom jsdoc generating script
        jsdoc javascript.js
        echo +++ Run: `date`  +++
fi

# stops while loop from consuming a lot of resources
# and making my fan whirr like he wants the computer to take off
sleep .1

done

我知道有更好的方法 - 只是不是那种方法。任何帮助表示赞赏。

编辑:安装了 inotify-tools 的 linux 机器的更新应该可以工作

#!/bin/bash

# with inotify-tools installed...

# only watches first parameter for modification
while inotifywait -e modify $1; do
        echo
        echo +++ Building JSDocs +++
        jsdoc $@
        echo +++ Last run: `date`  +++
done

但是,我希望它可以在 Linux 和 OSX shell 上运行,所以我可以在这两种环境中使用

【问题讨论】:

  • 只是一个建议,你为什么不把它编码到你的编辑器中 - vi/emacs ?创建一个宏来保存文件并运行 jsdoc。在 vi 中,您可以使用 :!jsdoc % % 扩展为当前正在编辑的文件的名称。保存并在一行中运行 - :w | !jsdoc %

标签: linux file macos shell


【解决方案1】:

有一个名为INotify 的Linux 内核功能可以监视文件系统的任何更改。它作为许多系统 API 公开。

对于脚本,有一个名为 inotify-tools 的包,它允许脚本访问通知系统。

【讨论】:

  • 很好的答案 - 对于 linux,这运行良好,但我忘了提到我也需要 OSX,并且 inotify-tools 无法安装在 OSX 上(据我所知)
  • 快速网络搜索建议查看 kqueue/kevent
最近更新 更多