bash 스크립트를 파일에 연결할 수 있습니까?


32

특정 파일을 수정하거나 삭제하지 않은 경우 (또는 특정 디렉토리에서 생성 된 파일 또는 ...)가 아니면 스크립트를 휴면 상태로 만들고 싶습니다. 이것은 우아한 방법으로 달성 될 수 있습니까? 내 마음에 오는 가장 간단한 것은 상태를 다시 확인하기 전에 잠시 동안 잠이 드는 루프이지만 더 우아한 방법이 있습니까?

답변:


34

리눅스에서는 커널 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...

1
대부분의 유니스는 비슷한 기능을 가지고 있습니다. 불행히도 각각에는 고유 한 인터페이스가 있으며 많은 API가 없습니다.
Gilles 'SO- 악의를 멈추십시오'


3

실제로 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

흥미롭지 만 이상합니다. 그래서 ... 표준 입력에서 많은 파일 이름을 읽고 그 중 하나가 변경되면 지정된 명령을 실행합니까?
tripleee

재미있어 보여요, 고마워요! entr변경된 파일 이름을 전달할 수 있는 방법이 있습니까?
Tobias Kienzler

2.7 릴리스 /_$
부터는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.