'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

당신이 할 수 있기를 원한다면 export SHELL=/bin/bash.env -s cmdcmd

문서화 된대로맨페이지(강조 entr):

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

/bin/bash반드시 호출된 쉘이나 사용자의 로그인 쉘일 필요는 없습니다 .

정의되지 않은 경우 SHELL(스크립트 등의 경우일 필요는 없음) Debian에서는 함수를 사용하고 내보낼 수 없는 쉘인 entr으로 자체 설정되며 , 더 나아가/bin/shdashbash제거하다그들은 환경에서 왔습니다.

관련 정보