如何在文件改变时执行命令?
我想要一个快速而简单的方法,在文件发生变化时执行一个命令。我想要一个非常简单的东西,我可以让它在终端上运行,并在我完成对该文件的处理后关闭它。
目前,我正在使用这个。
while read; do ./myfile.py ; done
然后我需要去那个终端,按Enter,每当我在编辑器上保存该文件时。我想要的是像这样的东西。
while sleep_until_file_has_changed myfile.py ; do ./myfile.py ; done
或者任何其他如此简单的解决方案。
BTW:我用的是Vim,我知道我可以添加一个自动命令来运行BufWrite上的东西,但这不是我现在想要的那种解决方案。
更新:我想要一些简单的东西,如果可能的话可以丢弃。更重要的是,我想让一些东西在终端运行,因为我想看到程序的输出(我想看到错误信息)。
关于答案:感谢你的所有答案!所有这些答案都非常好,而且都是在你的指导下完成的。所有这些都非常好,而且每一个都采取了与其他的非常不同的方法。由于我只需要接受一个,所以我接受了我实际使用过的那个(它简单、快捷、容易记忆),尽管我知道它不是最优雅的。
438
3
使用Vim的解决方案。
但我不想要这个解决方案,因为它打字有点烦人,有点难记住到底要打什么,而且要撤销它的效果有点困难(需要运行
:au! BufWritePost myfile.py
)。此外,这个方案会阻止Vim,直到命令执行完毕。我把这个方案加在这里只是为了完整,因为它可能会帮助其他人。
要显示程序输出(并且完全打乱你的编辑流程,因为输出会在你的编辑器上写几秒钟,直到你按下Enter键),请删除
:silent
命令。请看一下incron。它与cron相似,但使用inotify事件而不是时间。
在编程方面有点多,但你想要像inotify那样的东西。有很多语言的实现,比如jnotify和pyinotify。
这个库允许你监控单个文件或整个目录,并在发现一个动作时返回事件。返回的信息包括文件名、操作(创建、修改、重命名、删除)和文件路径,以及其他有用的信息。