更改文件时执行一些操作


10

编写LaTeX文档时,我发现自己经常在编辑器中按F6键进行编译。或者,当我使用SASS时,我经常键入make将其转换.scss.css

现在,我想让机器在make每次给定文件更改时执行肮脏的工作并运行或执行其他操作。

到目前为止,我一直打开终端窗口,然后按向上箭头并返回。或者我用过watch make,但这似乎是一个奇怪的解决方案。

在给定文件更改时,Linux上有什么好方法吗?

Answers:


4

您正在寻找inotify-tools的inotifywait一部分。在项目的网站上有一些如何使用它的示例,但是一种简单的方法是,

while true; do inotifywait code.cpp -e modify; make; done

其中的关键部分是

inotifywait code.cpp -e modify

该命令将等待,直到code.cpp被修改然后退出。置于无限循环中,并随后make使其在每次修改后不断重建。

除了等待修改之外,您还可以等待创建,删除,访问,打开,关闭等等。我强烈建议您查看项目示例inotifywait手册页,以获取有关如何使用它的其他一些想法。


那正是我要的!
马丁·尤丁

1

看一下incron,它是类似于cron的包,它响应文件系统事件而不是时间事件。该软件包包括守护进程(的incrond)和一个表操纵器(incrontab),类似于公知crond/ crontab对的cron的。

使用incron,您可以轻松地安排make在修改特定文件和/或目录时运行。


一方面,这似乎有点矫kill过正,但另一方面,它只是正确的工具。我必须检查一下,也许我可以为每个编程会话启用和禁用它。
Martin Ueding'4

0

不是watch make,怎么样watch ls?然后,make当时间戳更改时。


好了,make已经检查了时间戳,因此检查时间然后让make再次检查时间是毫无意义的。
Martin Ueding'4

正确,但是运行make比运行ls更昂贵。
Scott C Wilson

1
如果我的makefile仅是那一行的两行.tex?您认为写一个ls解析器值得吗?
Martin Ueding'4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.