类似于 inotifywait,但无法安装 inotifywait

类似于 inotifywait,但无法安装 inotifywait

我想不断地重建和测试项目,但刚刚发现我学校的 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.pathprojectrebuild.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

相关内容