'entr'이 로컬로 정의된 쉘 함수를 실행하도록 만듭니다.

'entr'이 로컬로 정의된 쉘 함수를 실행하도록 만듭니다.

entr파일이 변경될 때 쉘 명령을 실행하는 데 사용됩니다. 다음 스크립트는 출력됩니다파일이 변경되었습니다.파일이 나올 때마다/tmp/data.txt수정되었습니다.

#!/usr/bin/env sh

echo "/tmp/data.txt" | entr -s 'echo "File changed."'

실행할 명령이 더 복잡해지면 entr다음과 같이 명령을 별도의 함수로 이동하고 함수를 호출하는 것이 편리할 것입니다.

#!/usr/bin/env sh

foo() { echo "File changed!"; }

echo "$0" | entr -s 'foo' # Error: command not found: foo

불행하게도 이는명령어를 찾을수 없음오류가 발생했습니다. 이는 내 로컬로 정의된 함수를 entr. 이 작업을 수행할 수 있는 방법이 있습니까? 여기서 근본적인 문제는 무엇입니까?

감사합니다

답변1

내부에서 bash로 내보낸 함수를 사용하려면 export SHELL=/bin/bash호출하기 전에 해야 합니다 .env -s cmdcmd

에 문서화된 바와 같이맨페이지( 강조 entr):

-s 인터프리터를 사용하여 첫 번째 인수를 평가합니다.SHELL환경 변수 에 의해 지정됨.

반드시 그런 것은 아니며 /bin/bash호출된 쉘 또는 사용자의 로그인 쉘입니다.

가 정의되지 않은 경우 SHELL(스크립트 등에서 그럴 필요는 없음) entr자체적으로 로 설정됩니다 /bin/sh. 데비안에서는 dash로 내보낸 함수를 사용할 수 없는 쉘 이며 bash, 게다가제거하다환경에서 그들을.

관련 정보