我对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)。有办法吗?
答案 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”之后。
这仍然很难看,但它确实有效。