每次我对文件进行一些更改并保存时,我都希望运行一个命令。我可以设置一个 Ruby 脚本来监视文件并按我的意愿运行命令,但我突然想到应该有一些简单的 Unix 方法来做到这一点。有吗?我在 Ubuntu 8.10 上,稍微清楚一点。
编辑:
incron
被建议,看起来不错。但我无法让它工作(编辑:当我在指定目录中保存文件时,命令似乎没有运行,或者我的命令有故障)。我安装了 incron 并使用 incrontab 设置了我的用户的 incron 表,并将用户添加到允许列表中。我的具体情况是编辑 TeX 文件。我希望命令将其呈现为 PDF,以便在每次编辑和保存 TeX 文件时运行。所以这是我想到的 incron 表条目:
/home/ehsanul/Documents/latex IN_CLOSE_WRITE echo $@/$# | grep \\.tex$ | xargs xelatex
我究竟做错了什么?
答案1
你没有说你使用的是哪个 Unix,但是 Linux 有通知还有inotify 工具和因克龙。
有一个Ruby 接口到 inotify。
答案2
不是直接的,不是(除非文件系统上有某种我不熟悉的钩子)。
您是否通过某种标准方法编辑文件?如果是这样,从这个角度而不是从系统级别自动化命令会更容易。
如果您告诉我们更多情况,我们也许能够给您更好的答案。
答案3
如果您碰巧使用版本控制(如果您没有,您当然应该使用!),您可以设置提交钩子。只需选择一个允许您这样做的版本控制程序,大多数版本控制程序都允许这样做。
答案4
安装inotify 工具。
要监视单个文件并在其更改时执行命令:
inotifywait -m --format %w FILENAME | while read file; do
COMMAND ${file}
done
在哪里
FILENAME
:您要观看的文件的名称COMMAND
:文件更改时要执行的命令-m
:无限期收听的选项
inotifywait
可以输出除文件名之外的更多信息(通过--format
),请查看man inotifywait
它还能做什么(阅读起来很短)。此外,例子在 wiki 上提供一些见解。
有人可能应该将这些命令包装在方便的脚本中,以便完全按照您的要求执行
convenience-script FILENAME COMMAND