在AppleScript中发出新操作之前等待命令行程序执行

时间:2014-06-24 10:04:47

标签: applescript

我对AppleScript很陌生。我需要一个脚本打开3个iTerm标签并分别执行3个命令行程序。第一个程序终止,而最后一个程序不确定地运行。

这就是我所拥有的:

tell application "iTerm"
    activate
    set next to (make new terminal)
    tell next
        activate current session
        launch session "Default Session"
        tell the last session
            set name to "vagrant-db"
            write text "cd ~/Workspace/vagrant-db; vagrant up"
        end tell

        launch session "Default Session"
        tell the last session
            set name to "next/core"
            write text "cd ~/Workspace/next"
            write text "/usr/local/bin/sbt \"project core\" \"run\""
        end tell

        launch session "Default Session"
        tell the last session
            set name to "next/web"
            write text "cd ~/Workspace/next"
            write text "/usr/local/bin/sbt \"project web\" \"~re-start\""
        end tell

    end tell
end tell

问题是我需要在发出第二个和第三个之前等待第一个命令行操作结束(vagrant booting up)。有办法吗?

3 个答案:

答案 0 :(得分:1)

不确定是否可行,但可能正在使用"做shell脚本"来自applescript的命令,例如。

set response to do shell script "ls"

将返回根文件夹的内容。

另一种方式(但非常难看)是使用“延迟”#。 E.g。

delay 5

会延迟5秒

答案 1 :(得分:1)

之类的东西解决了
            --first program exec

            set a to 0
            repeat until (a = 1)
                if (text of current session contains "ready") then
                    set a to 1
                end if
            end repeat

            --second program exec
            --third program exec

答案 2 :(得分:1)

Rusty的回答对我有用。我正在添加这个答案以提供fusio要求的详细信息(对不起,我宁愿提供此评论,但评论需要更多的声誉点而不是添加新答案)。

Rusty的答案要求已经处于与当前窗口交谈的环境中。

on wait_for(str)
    tell application "iTerm"
        tell current window
            set a to 0
            repeat until (a = 1)
                if (text of current session contains str) then
                    set a to 1
                end if
            end repeat
        end tell
    end tell
end wait_for

然后,在您的代码中,请致电:

my wait_for("Provisioners marked to run always will still run.")

上述论点发生在“ready”之后。

这仍然很难看,但它确实有效。