我尝试了这种技术将命令的输出存储在 BASH 变量中。 它与“ls -l”一起使用,但当我运行苹果脚本时它不起作用。 例如,下面是我的 BASH 脚本调用苹果脚本。
我试过这个:
OUTPUT="$(osascript myAppleScript.scpt)"
echo "Error is ${OUTPUT}"
我可以看到我的苹果脚本在命令行上运行,并且我可以看到命令行上输出的错误,但是当它打印“错误是”时,它打印空白,就好像苹果脚本输出没有被存储一样。
注意:我的苹果脚本故意出错来测试这一点。我试图通过收集苹果脚本输出来正确处理错误
尝试将 stderr (
2
) 重定向到 stdout (1
):
OUTPUT="$(osascript myAppleScript.scpt 2>&1)"
echo "$OUTPUT"
成功后,脚本的输出将写入 STDOUT。失败时,错误消息将写入 STDERR,并设置非零返回代码。您想首先检查返回码,例如
if [ $? -ne 0 ]; then...
,如果您需要详细信息,那么您需要捕获 osascript
的 STDERR。
或者,根据您正在执行的操作,最简单的方法可能是将
set -e
放在 shell 脚本的顶部,以便一旦其中任何位置发生任何错误,脚本就会终止。
坦率地说,bash 及其同类确实是一个 POS。我见过的唯一还算不错的 *nix shell 是鱼,但它并不是任何东西的标准(当然)。对于复杂的脚本编写,您可能最好使用 Perl/Python/Ruby。
您还可以使用剪贴板作为数据桥梁。例如,如果您想将标准输出放入剪贴板,您可以使用:
osascript myAppleScript.scpt | pbcopy
事实上,您可以直接从您的 applescript 复制到剪贴板,例如。与:
set the clipboard to "precious data"
-- or to set the clipboard from a variable
set the clipboard to myPreciousVar
要获取 bash 脚本中的数据,您可以使用以下命令将剪贴板读取到变量中:
data="$(pbpaste)"
man pbpase
。