在我的客厅里,我有一台 Mac Mini,我既可以用作 HTPC,也可以用作家庭自动化服务器。它用于自动化的软件是 Shion,这是一款支持 AppleScript 的免费家庭自动化应用程序。在同一台 Mac Mini 上,我正在运行 Apache,并构建了一个接口,我可以通过该接口发送命令。(值得一提的是,该界面是使用 jQuery Mobile 构建的。)
我遇到的问题是在终端和 AppleScript 编辑器中运行良好的 AppleScript 在 Apache 错误日志中引发解析错误。由于终端和 AppleScript 编辑器成功运行脚本,我猜我编写 PHP 的方式是问题所在。但是当我检查错误日志时,它实际上是一个 AppleScript 错误。
AppleScript 命令非常简单:
tell application "Shion"
execute snapshot "Evening Lighting"
end tell
或者更简单:
tell application "Shion" to execute snapshot "Evening Lighting"
这是我开始使用的原始命令,因为我不确定如何使用 -e 标志将 AppleScript 分成多行。当我将它粘贴到 AppleScript 编辑器或终端中时,它会毫无问题地执行。但是在 PHP 中运行它是行不通的:
$cmd = "osascript -e 'tell application \"Shion\" to execute snapshot \"Evening Lighting\"'";
exec($cmd);
在日志文件中,脚本返回的错误是“ A [sic] identifier can't go after this identifier ”。这是多个人遇到的 AppleScript 错误,但我找不到任何一致的解决方案。我发现的一条线索是尝试将“使用应用程序“Shion”中的术语”添加到脚本的开头,使其看起来像这样:
using terms from application "Shion"
tell application "Shion"
execute snapshot "Evening Lighting"
end tell
end using terms from
我必须弄清楚如何使用 osascript 将 AppleScript 分成多行,这可以使用 -e 标志来完成。如果我将其作为常规 osascript 命令运行,它看起来像这样:
osascript -e 'using terms from application "Shion"' -e 'tell application "Shion"' -e 'execute snapshot "Evening Lighting"' -e 'end tell' -e 'end using terms from'
再一次,它在终端以及 AppleScript 编辑器中运行没有问题。但是现在我的日志中出现了一个不同的错误:“预期的行尾,但找到了标识符”。