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" 루프의 파이프는 별도의 하위 쉘에서 실행됩니다. 함수가 내보내지지 않기 때문에 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

답변2

entr의 프로그래머가 대답했습니다(https://github.com/eradman/entr/issues/6): "함수는 서브쉘로 내보낼 수 있지만 외부 프로그램에서는 함수를 실행할 수 없습니다. 쉘 함수를 실행하려면 다음과 같이 루프를 작성할 수 있습니다."

do_it(){ echo 'Eita!'; }

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

관련 정보