繁体   English   中英

AppleScript 执行 shell 脚本返回“哪个”命令的错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM