특정 파일을 수정하거나 삭제하지 않은 경우 (또는 특정 디렉토리에서 생성 된 파일 또는 ...)가 아니면 스크립트를 휴면 상태로 만들고 싶습니다. 이것은 우아한 방법으로 달성 될 수 있습니까? 내 마음에 오는 가장 간단한 것은 상태를 다시 확인하기 전에 잠시 동안 잠이 드는 루프이지만 더 우아한 방법이 있습니까?
특정 파일을 수정하거나 삭제하지 않은 경우 (또는 특정 디렉토리에서 생성 된 파일 또는 ...)가 아니면 스크립트를 휴면 상태로 만들고 싶습니다. 이것은 우아한 방법으로 달성 될 수 있습니까? 내 마음에 오는 가장 간단한 것은 상태를 다시 확인하기 전에 잠시 동안 잠이 드는 루프이지만 더 우아한 방법이 있습니까?
답변:
리눅스에서는 커널 inotify
기능을 사용할 수 있습니다 . 스크립팅 도구는 inotify-tools 에서 찾을 수 있습니다 .
위키에서 사용 예 :
#!/bin/sh
EVENT=$(inotifywait --format '%e' ~/file1) # blocking without looping
[ $? != 0 ] && exit
[ "$EVENT" = "MODIFY" ] && echo 'file modified!'
[ "$EVENT" = "DELETE_SELF" ] && echo 'file deleted!'
# etc...
C 프로그래머를위한 inotify 라는 API가 있습니다 .
incron 및 inotify-tools 와 같은 도구를 사용하는 도구가 있습니다 .
실제로 entr (1) 은 파일이 변경 될 때 임의의 명령을 실행하며 응용 프로그램 서버를 다시 시작하기위한 자동 재로드 옵션을 제공합니다.
편집 : 몇 가지 예
소스 파일이 변경되면 다시 작성
$ find *.c | entr make
파일이 변경되면 테스트 서버를 시작하고 자동으로 다시로드
$ ls *.py | entr -r python main.py
agument를 제공하면 명명 된 파이프로 변경되는 각 파일의 이름을 쓰 +/path/to/fifo
도록 지시함으로써보다 복잡한 스크립팅이 가능합니다 entr
. 다음은 현재 디렉토리의 Markdown 파일을 편집 할 때 HTML로 변환합니다.
$ ls *.md | entr +/tmp/notify &
$ while read F
> do
> markdown2html $F
> done < /tmp/notify
entr
변경된 파일 이름을 전달할 수 있는 방법이 있습니까?
/_
$