이 파일이 수정될 때 확장자를 가진 파일에서 함수를 실행하기 myscript.sh
위해 다음 코드를 추가했습니다 ..md
function my_function(){
echo "I\'ve just seen $1"
}
typeset -fx my_function
find . -name "*.md" |
entr -r -s "my_function $0"
문서로 이동: * [...] 이벤트를 발생시킨 첫 번째 파일의 이름은 $0부터 읽을 수 있습니다. *
README.md를 변경하면 "I just saw README.md"가 출력될 것으로 예상됩니다.
실제로 스크립트를 시작하고 README.md를 변경하면 다음과 같은 출력이 나타납니다.
bash myscript.sh
# output: I've just seen myscript.sh
내게 이유를 말해줘?
답변1
쉘 스크립트에서 enter를 호출하고 있습니다. 쉘이 변수 대체를 수행할 때(또는매개변수 확장매뉴얼에서는) $0
스크립트의 파일 이름으로 확장됩니다. $0
쉘이 변수 대체를 수행하는 것을 방지하려면 다음을 사용하십시오 \
.
find . -name "*.md" | entr -r -s "my_function \$0"
편집하다:@roaima가 상기시켜 주듯이, 또 다른 방법은 인용된 전체 텍스트를 보호하는 작은따옴표를 사용하는 것입니다.
find . -name "*.md" | entr -r -s 'my_function $0'
알아채다:SHELL
환경 변수가 bash와 호환되지 않는 것으로 설정 되면 typeset -fx my_function
entr에서는 전혀 작동하지 않을 수 있습니다(예: 작동하지 않습니다 SHELL=/bin/mksh
). 또한셰르본스크립트에 추가하고 불필요한 단어를 생략하세요 function
.
#!/bin/bash
my_function(){
echo "I've just seen $1"
}
typeset -fx my_function
find . -name "*.md" |
entr -r -s "my_function \$0"