我正在编写一个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
,我会得到预期的结果。
我怎么才能让它工作?
1条答案
按热度按时间yk9xbfzb1#
正如@GordonDavisson建议的那样,可以使用
echo $PATH
查看路径。要更改applescript的路径(并查看更改),请尝试以下操作:
shell命令的第一部分(到分号为止)将把
/usr/local/bin
添加到默认路径前面,第二部分将返回更新后的路径,分号表示第二部分在第一部分完成后运行。需要注意的是,这个更改是临时的,并且只在shell脚本运行时有效,这就是为什么您需要组合命令才能看到效果。
我将使用'rsync'作为示例,因为我没有rclone;替换'rclone'以获取其路径。要获取其路径,请将
export
命令与which
组合在一起,如下所示:结果是
/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以上都只是我的理解,是有限的。