![](/img/trans.png)
[英]Is it possible to use command substitution in an applescript call to `do shell script`?
[英]AppleScript do shell script returns error for "which" command
我正在写一个 AppleScript ,它会询问用户哪个远程云服务,然后他们想使用rclone在 Mac OS 中安装哪个存储桶。 但是为了在 AppleScript 中运行rclone
命令,您需要包含应用程序的完整路径。 对我来说是: /usr/local/bin/rclone
我想在 shell 脚本中使用which
命令将 rclone 的位置作为变量包含在内,如下所示:
set rcloneLOC to paragraphs of (do shell script "which rclone")
但是我收到一个脚本错误,指出“命令以非零状态退出”。 即使我只是尝试自己运行do shell script "which rclone"
发生这种情况。 如果我在终端中输入which rclone
,我会得到我期望的结果。
我如何让它工作?
正如@GordonDavisson 所建议的那样,您可以使用echo $PATH
查看您的路径。
要更改 applescript 的路径(并查看更改),请尝试以下操作:
do shell script "export PATH=/usr/local/bin:$PATH ; echo $PATH"
shell 命令的第一部分(直到分号)会将/usr/local/bin
添加到您的默认路径。 第二部分将返回您的更新路径。 分号表示在第一部分完成后运行第二部分。
请务必注意,此更改是暂时的,并且仅在该 shell 脚本运行时有效。 这就是为什么您需要组合命令才能看到效果的原因。
我将使用“rsync”作为示例,因为我没有 rclone; 替换“rclone”以获取其路径。 要获取它的路径,您可以将export
命令与which
结合使用,如下所示:
do shell script "export PATH=/usr/local/bin:$PATH ; which rsync"
结果是/usr/local/bin/rsync
。
澄清几件事……环境是适用于每个用户的一组条件。 您可以通过在终端中运行man 7 environ
来获得它的基本概要。 有一个env
命令可以列出您的设置并允许您编辑它们; man env
将提供有关它的信息。 在这些手册页的底部,您应该会看到对相关命令的引用,您也可以查找这些命令。 同时,在脚本编辑器中,您可以使用do shell script "env"
运行单行脚本,并查看 applescript 的 shell 的相应环境。
根据 Apple 的文档(或我对它的解释),他们选择了这种设置,因为它相对安全且便携。 您知道每次运行 shell 脚本时会得到什么。 您不需要使用更现代的 shell 来运行which
命令。 您可以根据需要修改环境,就像您在使用终端时一样。
最后,Apple 提供了技术说明 2065 ,其中提供了有关将 shell 脚本与 applescript 结合使用的信息。此外,您还可以在此处或unix堆栈交换中获得更多信息。
NB以上所有只是我的理解,这是有限的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.