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

系统 Linux
这是一篇简短的文章。我是最近才发现 entr 的,我很惊奇从来没有人告诉过我?!因此,如果你和我一样,那么我告诉你它是什么。

[[333412]]

这是一篇简短的文章。我是最近才发现 entr 的,我很惊奇从来没有人告诉过我?!因此,如果你和我一样,那么我告诉你它是什么。

entr 的网站上对它已经有很好的解释,也有很多示例。

总结在其头部:entr 是一个命令行工具,当每次更改一组指定文件中的任何一个时,都能运行一个任意命令。你在标准输入给它传递要监控的文件列表,如下所示:

  1. git ls-files | entr bash my-build-script.sh

或者

  1. find . -name *.rs | entr cargo test

或者任何你希望的。

快速反馈很棒

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

许多工具(例如 hugo 和 flask)都有一个内置的系统,可以在更改文件时自动重建,这很棒!

但是通常我会自己编写一些自定义的构建过程(例如 bash build.sh),而 entr 让我有了一种神奇的构建经验,我只用一行 bash 就能得到即时反馈,知道我的改变是否修复了那个奇怪的 bug。万岁!

重启服务器(entr -r)

但是如果你正在运行服务器,并且每次都需要重新启动服务器怎么办?如果你传递 -r,那么 entr 会帮你的

  1. git ls-files | entr -r python my-server.py

清除屏幕(entr -c)

另一个简洁的标志是 -c,它让你可以在重新运行命令之前清除屏幕,以免被前面构建的输出分散注意力。

与 git ls-files 一起使用

通常,我要跟踪的文件集和我在 git 中的文件列表大致相同,因此将 git ls-files 传递给 entr 是很自然的事情。

我现在有一个项目,有时候我刚创建的文件还没有在 git 里。那么如果你想包含未被跟踪的文件怎么办呢?这些 git 命令行参数就可以做到(我是从一个读者的邮件中得到的,谢谢你!):

  1. git ls-files -cdmo --exclude-standard | entr your-build-script

有人给我发了邮件,说他们做了一个 git-entr 命令,可以执行:

  1. git ls-files -cdmo --exclude-standard | entr -d "$@"

我觉得这真是一个很棒的主意。

每次添加新文件时重启:entr -d

git ls-files 的另一个问题是有时候我添加一个新文件,当然它还没有在 git 中。entr 为此提供了一个很好的功能。如果你传递 -d,那么如果你在 entr 跟踪的任何目录中添加新文件,它就会退出。

我将它与一个 while 循环配合使用,它将重启 entr 来包括新文件,如下所示:

  1. while true
  2. do
  3. { git ls-files; git ls-files . --exclude-standard --others; } | entr -d your-build-scriot
  4. done

entr 在 Linux 上的工作方式:inotify

在 Linux 中,entr 使用 inotify(用于跟踪文件更改这样的文件系统事件的系统)工作。如果用 strace 跟踪它,那么你会看到每个监控文件的 inotify_add_watch 系统调用,如下所示:

  1. inotify_add_watch(3, "static/stylesheets/screen.css", IN_ATTRIB|IN_CLOSE_WRITE|IN_CREATE|IN_DELETE_SELF|IN_MOVE_SELF) = 1152

就这样了

我希望这可以帮助一些人了解 entr

 

责任编辑:庞桂玉 来源: Linux中国
相关推荐

2020-02-01 16:16:31

UbuntuLinuxWindows

2013-04-10 15:35:49

IDF2013英特尔柏安娜

2019-07-03 09:32:11

APIGGVKong

2018-05-02 13:40:51

Linux命令touch

2011-02-13 13:44:08

Linux关机重新启动

2012-03-19 10:46:53

ibmdw

2018-06-26 10:34:39

云迁移架构云计算

2021-05-17 15:08:27

PythonWindows背景编程语言

2021-05-19 14:25:19

前端开发技术

2011-09-09 19:33:49

Windowsxp文件关联

2024-10-30 08:15:18

2024-03-12 10:05:47

大型语言模型

2020-02-21 11:08:24

浏览器HTML设计

2020-02-16 12:01:53

Windows 10Windows微软

2018-10-24 12:15:06

无服务器软件方式

2019-07-29 08:00:18

文件容器Docker Comp

2020-08-19 14:48:10

人工智能IBMIBM Cloud P

2023-07-21 10:56:17

人工智能数据中心

2009-02-10 10:45:13

arm-linux仿真运行环境NFS

2011-08-30 16:34:51

SQL Server 阻止保存要求重新创建表
点赞
收藏

51CTO技术栈公众号