每次保存文件时执行的 linux(和 OSX)shell 命令

标签 linux file macos shell

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

这是工作脚本:

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 上运行,所以我可以在两种环境中使用

最佳答案

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

对于脚本,有一个名为 inotify-tools 的包这使脚本可以访问通知系统。

关于每次保存文件时执行的 linux(和 OSX)shell 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962913/

相关文章:

linux - 用 whiptail 显示一个变量

linux - Ltib 安装问题

c - 使用 stat() 函数访问 m_time 的正确方法

php - 防止跨站点文件上传到我的服务器?

file - Ansible - 复制是否支持 shell * 扩展

macos - 在 OSX 上对 curl 的 SFTP 支持

c# - 使用在 Linux 上运行的 .Net 2.2 核心读取文件共享上的文件内容

javascript - 覆盖 Node 服务器中的文件

iphone - 异常代码 : KERN_PROTECTION_FAILURE at 0x00000000 Error

c# - 适用于 Mac 和 Windows 的音频框架