![类似于 inotifywait,但无法安装 inotifywait](https://linux22.com/image/1464724/%E7%B1%BB%E4%BC%BC%E4%BA%8E%20inotifywait%EF%BC%8C%E4%BD%86%E6%97%A0%E6%B3%95%E5%AE%89%E8%A3%85%20inotifywait.png)
我想不断地重建和测试项目,但刚刚发现我学校的 RHEL 发行版没有附带 inotify 或 inotifywait。
有没有我可以使用的替代方案,而不需要使用 sudo?
我只是想make
在文件发生变化时自动重新。
编辑:我改用轮询(这很有趣,因为我正在为并发类做这个),所以任何比这更好的方法都会有用
watch:
while true; do \
make | grep -v -e "Nothing to" -e "Entering" -e "Leaving"; \
sleep 1; \
done
答案1
一个好的选择是文件系统变更。你可以从上面的链接下载源代码并自行编译。
还有目录_minotor(例如参见此网页欲了解更多信息,请参阅 C++ 中的跨平台解决方案。我从未使用过它,只是存储了链接以备将来“可能”使用。
至于inotify
,我不使用 RHEL,所以我对此并不了解,但你确定你应该在 repos 中找到它吗?它是在内核中实现的,而不是作为 repo 包实现的。你可以尝试安装inotify 工具看看你的内核是否确实支持inotify
。你可以这样做甚至如果您无权访问sudo
:
将源代码下载到本地(IE在 上/home/your_name
),编译它,将它安装在 中/home/your_name/bin
,然后在本地自己的文件上运行它。这是我在本科时经常做的事情,我还没有尝试过用 inotify-tools 来做,但它应该是绝对可行的。
答案2
您可以使用systemd 路径单元监视文件或目录。systemd 用户实例不需要 root 访问权限,并且默认情况下 RHEL 上应启用它。用于systemctl --user
发出命令并/usr/lib/systemd/user/
添加您的单位,例如projectrebuild.path
和projectrebuild.service
:
[Unit]
Description="Monitor my project files and rebuild if changes occur"
[Path]
PathModified=/some/path/to/monitor
Unit=projectrebuild.service
[Install]
WantedBy=default.target
[Unit]
Description="Rebuild project"
[Service]
Type=oneshot
ExecStart=/path/to/build/script
systemctl --user enable --now projectrebuild.path