如何在文件改变时执行命令?

我想要一个快速而简单的方法,在文件发生变化时执行一个命令。我想要一个非常简单的东西,我可以让它在终端上运行,并在我完成对该文件的处理后关闭它。

目前,我正在使用这个。

while read; do ./myfile.py ; done

然后我需要去那个终端,按Enter,每当我在编辑器上保存该文件时。我想要的是像这样的东西。

while sleep_until_file_has_changed myfile.py ; do ./myfile.py ; done

或者任何其他如此简单的解决方案。

BTW:我用的是Vim,我知道我可以添加一个自动命令来运行BufWrite上的东西,但这不是我现在想要的那种解决方案。

更新:我想要一些简单的东西,如果可能的话可以丢弃。更重要的是,我想让一些东西在终端运行,因为我想看到程序的输出(我想看到错误信息)。

关于答案:感谢你的所有答案!所有这些答案都非常好,而且都是在你的指导下完成的。所有这些都非常好,而且每一个都采取了与其他的非常不同的方法。由于我只需要接受一个,所以我接受了我实际使用过的那个(它简单、快捷、容易记忆),尽管我知道它不是最优雅的。

使用Vim的解决方案。

:au BufWritePost myfile.py :silent !./myfile.py

但我不想要这个解决方案,因为它打字有点烦人,有点难记住到底要打什么,而且要撤销它的效果有点困难(需要运行:au! BufWritePost myfile.py)。此外,这个方案会阻止Vim,直到命令执行完毕。

我把这个方案加在这里只是为了完整,因为它可能会帮助其他人。

要显示程序输出(并且完全打乱你的编辑流程,因为输出会在你的编辑器上写几秒钟,直到你按下Enter键),请删除:silent命令。

评论(2)

请看一下incron。它与cron相似,但使用inotify事件而不是时间。

评论(1)

在编程方面有点多,但你想要像inotify那样的东西。有很多语言的实现,比如jnotifypyinotify

这个库允许你监控单个文件或整个目录,并在发现一个动作时返回事件。返回的信息包括文件名、操作(创建、修改、重命名、删除)和文件路径,以及其他有用的信息。

评论(0)