AppleScript do shell脚本返回“which”命令的错误

wljmcqd8  于 2023-01-05  发布在  Shell
关注(0)|答案(1)|浏览(160)

我正在编写一个AppleScript,它会询问用户要使用rclone在Mac OS中挂载哪个远程云服务,然后挂载哪个bucket。但是,为了在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,我会得到预期的结果。
我怎么才能让它工作?

yk9xbfzb

yk9xbfzb1#

正如@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的相应环境。
根据苹果的文档(或者我对它的解释),他们选择这种设置是因为它相对安全和便携。你知道每次运行shell脚本时会得到什么。你不需要使用更 * 现代 * 的shell来运行which命令。你可以根据需要修改环境,就像你使用终端时一样。
最后,苹果提供了Technical Note 2065,它提供了在applescript中使用shell脚本的信息。此外,你可能可以在这里或unix堆栈交换中获得更多信息。
NB以上都只是我的理解,是有限的。

相关问题