等待shell脚本完成

时间:2013-11-22 13:28:17

标签: xcode applescript

我正在尝试使用Applescript在Xcode中创建一个应用程序来转换PDF。

问题是我需要Xcode / AppleScript等待每个'do shell script'命令在开始下一个之前完成处理。

有没有办法检测每个脚本是否已完成?

e.g。

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

谢谢, 安东尼

1 个答案:

答案 0 :(得分:5)

首先,从“系统事件”代码块中删除“do shell脚本”行。 “do shell script”命令不需要系统事件。

接下来,您可以强制Applecript不等待shell命令完成,并且还可以在applescript中获取命令的PID(进程ID)。例如,运行此命令。

do shell script "/bin/sleep 5"

您将看到它是一个基本的5秒延迟命令,AppleScript会在将控制权返回给脚本之前等待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!"

因此,应该为您提供实现目标的工具。祝你好运。