2013-11-22 3 views
3

Xcode에서 AppleScript를 사용하여 PDF 변환 프로그램을 만들려고합니다.쉘 스크립트가 완료 될 때까지 기다리는 중

문제는 각 'do shell script'명령이 처리를 끝내기 전에 Xcode/AppleScript를 기다려야한다는 것입니다.

각 스크립트가 완료되었음을 감지하는 방법이 있습니까?

예컨대

tell application "System Events" 
     do shell script "/opt/local/bin/convert task1.tif output1.pdf" 
    end tell 

tell application "System Events" 
     do shell script "/opt/local/bin/convert task2.tif output2.pdf" 
    end tell 

감사합니다, 앤서니

답변

5

첫째, "시스템 이벤트"코드 블록에서 "할 쉘 스크립트"라인을 제거합니다. "쉘 스크립트 수행"명령에는 시스템 이벤트가 필요하지 않습니다.

다음으로 셸 명령이 끝날 때까지 기다리지 않고 명령의 PID (프로세스 ID)를 다시 applescript로 가져올 수 있습니다. 예를 들어,이 명령을 실행하십시오.

기본 5 초 지연 명령이며, 스크립트에 제어권을 반환하기 전에 5 초가 기다리는 것으로 나타납니다.

이제이 명령을 실행하십시오.

do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!" 

이제 AppleScript는 5 초 동안 기다리지 않고 실행중인 sleep 명령의 PID를 얻게됩니다. 원래 명령 끝에 추가 한 내용에 주목하십시오.

이 PID를 사용할 수 있습니다. 반복 루프를 만들어 "ps"명령을 사용하여 PID가 계속 실행 중인지 확인할 수 있습니다. sleep 명령이 끝나면 PID는 더 이상 존재하지 않으며 sleep 명령이 끝난 시점을 알기위한 트리거로 사용할 수 있습니다.

set thePID to do shell script "/bin/sleep 5 > /dev/null 2>&1 & echo $!" 

repeat 
    do shell script "ps ax | grep " & thePID & " | grep -v grep | awk '{ print $1 }'" 
    if result is "" then exit repeat 
    delay 0.2 
end repeat 

return "the process is complete!" 

이렇게하면 목표를 달성 할 수있는 도구가 제공됩니다. 행운을 빕니다.

관련 문제