一部のファイルを監視するために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」ループのパイプは別のサブシェルで実行されます。関数がエクスポートされないため、do_it
実行中の正しいサブシェルはentr
これを知りません。最も短い解決策は関数をエクスポートすることです(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