2013-10-01 2 views
4

변경 사항을 파일로 모니터링하는 Perl 스크립트를 작성하고 있습니다.Perl inotify2는 각 파일 수정시 두 번 트리거합니다.

echo abc > /tmp/foo 

왜 :

#!/usr/bin/perl 
use strict; 
use Linux::Inotify2; 

my $inotify = new Linux::Inotify2 or die $!; 
my $filename = "/tmp/foo"; 
my $counter = 0; 

$inotify->watch (
    $filename, 
    IN_MODIFY, 
    sub { 
     ++$counter; 
     print "changed: $counter\n"; 
    } 
) or die $!; 

1 while $inotify->poll; 

이 핸들러는이 같은 테스트 경우마다/tmp를/foo는 변경 (2 회 $ 카운터를 증가)를 두 번이라고?

답변

4

어느

echo > /tmp/foo 
(즉 Linux::Inotify2 모듈 IN_CLOSE_WRITE입니다) @Lajos Veres이 제안 >>를 사용하거나 CLOSE_WRITE 이벤트에서 볼
+0

'bareword는 "CLOSE_WRITE"엄격한 "동안 허용되지

inotifywait -m /tmp/foo Setting up watches. Watches established. /tmp/foo MODIFY /tmp/foo OPEN /tmp/foo MODIFY /tmp/foo CLOSE_WRITE,CLOSE 
IN_MODIFY가 불만없이 실행 되더라도 '잠수함'으로 표시됩니다. 뭐라 구요? – spraff

+1

시도해보세요. IN_CLOSE_WRITE –

4

> 처음에 파일을 자릅니다 (수정 자체라고 생각합니다). >>로 시도하십시오.