특정 파일(또는 특정 디렉토리에 생성된 파일, 또는...)이 수정/삭제되지 않는 한 스크립트가 잠자기 상태로 유지되기를 원합니다. 이것이 우아한 방법으로 달성될 수 있습니까? 제가 생각할 수 있는 가장 간단한 것은 상태를 다시 확인하기 전에 잠시 휴면하는 루프입니다. 하지만 더 우아한 방법이 있을까요?
답변1
inotify
Linux에서는 커널의 기능을 사용할 수 있습니다 . 스크립팅 도구는 다음 위치에서 찾을 수 있습니다.이노티파이 도구.
위키피디아 사용 예:
#!/bin/sh
EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...
답변2
답변3
실제로는 다음과 같습니다.입력(1)파일이 변경되면 임의의 명령이 실행되며, 애플리케이션 서버를 다시 시작하기 위한 자동 다시 로드 옵션도 제공됩니다.
편집: 몇 가지 예
소스 파일이 변경되면 다시 빌드하세요.
$ find *.c | entr make
파일이 변경되면 테스트 서버를 시작하고 자동으로 다시 로드합니다.
$ ls *.py | entr -r python main.py
인수를 제공하면 각 파일의 이름을 명명된 파이프로 변경하도록 지시하여 더 복잡한 스크립트를 작성할 +/path/to/fifo
수 있습니다 . entr
다음 명령은 현재 디렉터리의 Markdown 파일을 편집하고 HTML로 변환합니다.
$ ls *.md | entr +/tmp/notify &
$ while read F
> do
> markdown2html $F
> done < /tmp/notify