2013-08-30 2 views
1

파일 시스템 이벤트가 발생할 때 명령을 실행하려면 inotifywait을 사용하고 있습니다. 나는 또 다른 파일 시스템 이벤트가 발생하고 또 다른 이벤트가 발생하면 5 초 동안 타이머를 다시 설정하고 좀 더 기다리고 싶습니다. 이해가 되니?Bash의 주소 지정 타이머

내 문제는 내가 Bash에서 이것을 공격하고 있는데 어떻게 해야할지 모르겠다. 자바 스크립트에서,이 같은 일부 코드의 setTimeout을 사용하십시오 :

function doSomething() { ... } 

var timer; 
function setTimer() { 
    window.clearTimeout(timer) 
    timer = window.setTimeout(doSomething, 5000); 
} 

// and then I'd just plug setTimer into the inotifywait loop. 

그러나이 배쉬의 주소, 지울 배경 타이머입니까?

+0

'sleep'을 실행하는 백그라운드 프로세스를 사용하여 에뮬레이션 할 수있는 경우도 있습니다. 그래도 응용 프로그램에 어떻게 사용할지 모르겠습니다. – Barmar

답변

0

내가 덜컹 거리며 걷는 아이디어 중 하나는 잠자기 후 원하는 최종 명령을 실행 한 다음 백그라운드에서 채우는 서브 쉘을 만드는 것입니다. 그것이 다시 실행되면, 이전의 PID를 집어 들고 그것을 누설하려고 시도합니다. 슬립가 완료되면 안전 기능으로

는 서브 쉘은 $ PID가 command 죽는 중반 실행

PID=0 
while inotifywait -r test/; do 
    [[ $PID -gt 0 ]] && kill -9 $PID 
    { sleep 5; PID=0; command; } & PID=$! 
done 

그것은 조금 지저분한입니다하지만 난 그것을 테스트했고 작동을 방지하기 위해 삭제합니다. ./test/에 새 파일을 만들면 $ PID가 0이 아닌 경우 이전 잠자기 명령을 죽이고 타이머를 다시 설정합니다.

+1

당신이 원하는 것이 내게 완전히 명확하지 않습니다. 하지만 약간의 개선점은'sh '에 대한 명시 적 호출을'{sleep 5; 명령} &'. – chepner

+0

@chepner 그래 맞아. – Oli