Entr:在监视文件更改时尝试触发函数

Entr:在监视文件更改时尝试触发函数

我正在尝试使用 entr 来监视一些文件。

我的脚本基于他们的示例:

do_it(){ echo Eita!; }
while true; do ls folder/* more-folder/* | entr -pd do_it; done
>> entr: exec do_it: No such file or directory

然而,这有效:

while true; do ls folder1/* folder2/* | entr -pd echo Eita!; done

我究竟做错了什么?

答案1

“while”循环中的管道在单独的子 shell 中运行。由于该do_it函数未导出,因此运行的右侧子子 shellentr不知道它。最短的解决方案是导出函数(bash 允许这样做)。

do_it(){ echo Eita!; }
export -f do_it
while true; do ls folder/* more-folder/* | entr -pd do_it; done

如果entr命令想要从磁盘执行某些操作,那么我建议将该函数放入脚本文件中,然后entr指向

文件名为 /path/to/do_it

#!/bin/sh
echo Eita!

确保文件可执行:

chmod +x /path/to/do_it

新命令行:

while true; do ls folder/* more-folder/* | entr -pd /path/to/do_it; done

答案2

entr的程序员回答(https://github.com/eradman/entr/issues/6): “函数可以导出到子shell,但不能用外部程序执行函数。如果要执行shell函数,可以编写如下循环:”

do_it(){ echo 'Eita!'; }

while true; do
    ls folder1/* folder2/* | entr -pd -s 'kill $PPID'
    do_it
done

相关内容