Enr:当文件更改时重新运行构建

2020-07-01 16:35:50

这将是一个相当快的帖子-我最近发现了关于entr的情况,我觉得为什么以前没有人告诉我这件事?!?!所以我告诉你这件事,以防你和我处于同一条船上。

在entr的网站上有很多关于这个工具的很好的解释和大量的例子。

摘要在标题中:Entr是一个命令行工具,它允许您在每次更改一组指定文件中的任何文件时运行任意命令。您可以将要在stdin上查看的文件列表传递给它,如下所示:

可能像世界上的每一个程序员一样,我发现每次更改代码时都必须手动重新运行构建/测试,这非常令人厌烦。

很多工具(如Hugo和Flask)都有一个内置的系统,当你更改文件时会自动重建,这很棒!

但是我经常有一些我自己编写的自定义构建过程(比如bash build.sh),entr让我有一个神奇的构建体验,在那里我可以获得即时反馈,告诉我我的更改是否用bash的关键代码行修复了奇怪的bug。万岁!

好的,但是如果您运行的是一台服务器,并且服务器每次都需要重新启动,那该怎么办呢?入口抓住你了-如果你通过了-r,那么。

另一个整洁的标志是-c,它允许您在重新运行命令之前清除屏幕,这样您就不会被前一个构建的输出分心/困惑。

通常,我想要跟踪的文件集与我在git中拥有的文件列表大致相同,所以git ls-files很自然地可以通过管道传输到Enr。

我现在有一个项目,有时我会有一些我刚创建的文件,而这些文件还不在GIT中。那么,如果你想包含未跟踪的文件,那又如何呢?这是我整理的一个小小的狂欢咒语,可以做到这一点:

可能只用一个git命令就可以做到这一点,但我不知道它是什么。

这个git ls-files的另一个问题是,有时我会添加一个新文件,当然它还不在git中。entr有一个很好的特性--如果您传递-d,那么如果您在任何目录中添加一个新文件,那么它就会退出。

我将它与一个小的While循环结合使用,该循环将重新启动entr以包括新文件,如下所示:

在Linux上,entr使用inotify(一个用于跟踪文件系统事件(如文件更改)的系统)工作-如果您运行它,您将看到请求它查看的每个文件都有一个inotify_add_watchsystem调用,如下所示: