Bash

Entr:嘗試在監視文件更改時觸發功能

  • September 2, 2019

我正在嘗試使用 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

我究竟做錯了什麼?

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

“while”循環中的管道在單獨的子外殼中執行。由於該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

引用自:https://unix.stackexchange.com/questions/537741