Bash
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
我究竟做錯了什麼?
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