以下是我的文件:
launcher.applescript
tell application ":path:to:applescript:apps:shell-script-launcher.app" to launch
shell-script-launcher.app [AppleScript,保存为应用程序]
do shell script "say starting script"
期望的行为:
实际行为:
我已尝试将应用保存为"仅限运行"以及"保持开放"。仍然没有进展。您有什么推荐的吗。最终结果必须是应用程序而不是Applescript。
答案 0 :(得分:16)
run
命令启动并运行应用程序隐藏 activate
命令启动,运行,激活应用程序(使其成为最前面的应用程序)launch
,according to Apple,“启动应用程序,如果它尚未运行,但不发送运行命令。”
on run
处理程序未被调用),但实际上在10.9之前是不正确的 - 见下文。脚本可以向其他应用程序发送命令到脚本应用程序。要启动非停留打开的应用程序并运行其脚本,请使用启动命令,然后运行命令,如下所示:
launch application "NonStayOpen"
run application "NonStayOpen"
launch命令启动脚本应用程序而不向其发送隐式运行命令。当run命令发送到脚本应用程序时,它会处理命令,必要时发回一个回复,然后退出。
launch
本身足以运行应用程序,并且确实是唯一适用于基于AppleScript的应用程序的命令 。
任何尝试执行run
或activate
(无论是否launch
除外)都会运行应用程序 - 甚至两次从AppleScript编辑器运行时(!;只是一次使用osascript
) - 但报告失败<appName> got an error: Connection is invalid
。
这让我觉得 bug 不确定OSX版本&lt; = 10.7的表现如何。
注意:我已经见过launch
一次的非执行行为,但是我在OS X 10.9.2和OS X 10.8上从头开始创建的每个非停留打开的基于AppleScript的测试应用程序.5还使用launch
执行脚本 - 与文档说的相矛盾。
如果您的系统行为不同和/或旧版本的行为方式,请告知我们。在什么OSX版本中,应用程序无法使用launch
创建?
在 OSX 10.10 上,行为与文档一致,有一点值得注意:
run application
就足够了 - 首先不需要单独的launch application
命令。do shell script
实用程序的 open
来绕过问题 - 这应该可行,无论是否应用程序是基于AppleScript还是不是:do shell script "open " & ¬
quoted form of POSIX path of ¬
alias ":path:to:applescript:apps:shell-script-launcher.app"
如果您知道应用程序的类型,您需要预先调用:
run script file
,正如@ regulus6633建议的那样 - 这样做的另一个好处是,调用的基于AppleScript的应用程序可以直接将对象返回给呼叫者:run script file ":path:to:applescript:apps:shell-script-launcher.app"
注意:还有load script file
,它确实只允许你加载脚本代码而不立即执行它。
run
/ activate
运行应用程序隐藏/最前端:run application ":path:to:applescript:apps:shell-script-launcher.app"
run
,即使是基于AppleScript的应用程序,只需忽略错误与try ... end try
,正如@atonus所暗示的那样 - 缺点是您将无法检测到实际调用应用程序的失败。您可以通过有选择地忽略特定的Connection invalid
错误(假定此错误不会合法发生)[OSX 10.10不再需要]来缓解此问题:
try
run application "Macintosh HD:Applications:_Sandbox-AppleScript0.app"
on error number -609 # 'Connection is invalid' error that is spuriously reported
# simply ignore
end try
launch
命令(虽然这对OP不起作用,可能是由于处理&lt; ; = 10.7 OSX版本): launch application ":path:to:applescript:apps:shell-script-launcher.app"
但是,不可取有两个原因:
launch
行为修复为不再执行,因此您的代码在运行时会中断。launch
调用时运行(隐藏),但AppleScript“documentation says不向其发送运行命令”和“允许您打开应用程序而不执行它通常的启动程序,例如打开一个新窗口“ - 这究竟意味着什么并不清楚,不同的应用程序似乎处理不同。答案 1 :(得分:4)
Applescript有“运行脚本”命令。它适用于applescripts或applescript应用程序。因此,如果我的桌面上有您的应用程序,那么这可以...
set appPath to (path to desktop as text) & "shell-script-launcher.app"
run script file appPath
答案 2 :(得分:4)
您是否尝试过open?
do shell script "open 'path/to/applescript/apps/shell-script-launcher.app' && say starting script"
答案 3 :(得分:1)
将其放在“try”关键字之间。
try
tell application ":path:to:applescript:apps:shell-script-launcher.app" to activate
end try
答案 4 :(得分:1)
这很简单,您只需使用普通do shell script
,例如:
do shell script "open " & ¬
quoted form of POSIX path of ¬
alias ":path:to:applescript:apps:shell-script-launcher.app"
答案 5 :(得分:1)
将脚本另存为应用程序。 将所需的脚本添加到Script文件夹中(参见下面的路径)
按如下方式运行,更改您要运行的每种类型的脚本...
property theApplicationPath : the path to me as text <br/>
property theShellScriptPath : theApplicationPath & "Contents:Resources:Scripts:test.command"<br/>
property theShellScript : the quoted form of POSIX path of theShellScriptPath<br/>
<br/>
tell application "Terminal" to (do shell script "/bin/bash " & theShellScript)
<br/>
热潮,鲍勃是你的叔叔!至少对我而言。
答案 6 :(得分:0)
这可能会有所帮助,但我不是这方面的专家。在这种情况下,我发现双重启动行为(在Yosemite上,我没有使用任何其他版本的OS X)非常讨厌和挖掘我发现可以检查它是否已经在运行。
这个脚本是我可以随时启动一个新的终端。
if application "Terminal" is running then
tell application "Terminal"
activate
do script ""
end tell
else
tell application "Terminal" to activate
end if