entr
是一个 Linux 包,它接受一个 watch 命令,然后在看到任何文件修改时运行另一个命令。示例:
http://eradman.com/entrproject/
# Rebuild project if sources change
$ ls | entr make
# Rebuild project and run tests if the build was successful
$ ls | entr -s 'make && make test'
我试图从我的项目根目录观察任何文件更改并(重新)运行 bats(一个 bash 测试运行器)。
~/cp/projectName$ ls -R | entr ./node_modules/bats/bin/bats -r ./helpers/tests
- 触发重新运行的唯一文件修改是项目根目录中的修改。
- /helpers 和 /helpers/tests 中的文件更改均会被忽略
- 我尝试过不使用 -R(递归)标志。观察者的行为没有变化。
有没有更好的方法来entr
监视子文件夹树中的任何嵌套文件更改?
我可以打开多个终端来查看子文件夹。这会损害我的工作流程,因为屏幕空间不足以容纳所有子文件夹;我必须切换活动的终端选项卡(Lubuntu 20.04)。
答案1
首先,ls
不监视任何东西。entr
显然是将路径作为输入并监视它们;ls
只是一个打印这些路径的工具。碰巧的是,对于当前目录,文件名相当于路径。
其次,如果entr
确实需要路径,ls -R
则输出将大部分是乱码,因为它将目录名称打印为标题行,然后将文件名打印在其下方,因此路径不适用于entr
。您应该改用find
:
find | entr ...