inotifywait -m
"모니터"모드입니다 . 종료되지 않습니다. 쉘은 그것을 실행하고 종료 코드가 루프 본문을 실행할지 여부를 알기를 기다립니다. 그러나 결코 오지 않습니다.
를 제거 -m
하면 작동합니다.
while inotifywait -r -e close_write "/root/secondfolder/"
do
echo "close_write"
done
생산
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
/root/secondfolder/ CLOSE_WRITE,CLOSE bar
close_write
Setting up watches. Beware: since -r was given, this may take a while!
Watches established.
...
기본적으로 inotifywait는 "첫 번째 이벤트가 발생한 후 종료"되며 이는 루프 조건에서 원하는 것입니다.
대신 다음과 같은 표준 출력을 읽는 것이 좋습니다 inotifywait
.
#!/bin/bash
while read line
do
echo "close_write: $line"
done < <(inotifywait -mr -e close_write "/tmp/test/")
이 (bash) 스크립트는 프로세스 대체를 사용하여 inotifywait
명령 의 각 출력 라인을 $line
루프 내의 변수 로 읽습니다 . 루프 주변에서 매번 재귀 시계를 설정하지 않아도되므로 비용이 많이들 수 있습니다. bash를 사용할 수 없다면 대신 명령을 루프로 파이프 할 수 있습니다 . 이 모드에서 각 이벤트에 대해 한 줄의 출력을 생성하므로 루프가 각 행마다 한 번씩 실행됩니다.inotifywait ... | while read line ...
inotifywait