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 cmd
cmd
에 문서화된 바와 같이맨페이지( 강조 entr
):
-s
인터프리터를 사용하여 첫 번째 인수를 평가합니다.SHELL
환경 변수 에 의해 지정됨.
반드시 그런 것은 아니며 /bin/bash
호출된 쉘 또는 사용자의 로그인 쉘입니다.
가 정의되지 않은 경우 SHELL
(스크립트 등에서 그럴 필요는 없음) entr
자체적으로 로 설정됩니다 /bin/sh
. 데비안에서는 dash
로 내보낸 함수를 사용할 수 없는 쉘 이며 bash
, 게다가제거하다환경에서 그들을.