AppleScript:'哪个<command />'以非零状态退出

时间:2015-04-20 05:34:06

标签: macos shell applescript

我知道在使用do shell script调用shell命令时,它不会搜索所有位置,因此我应该使用完整路径来命令。因此,我正在做的是set cmmd to (do shell script “which <command>”),然后是do shell script cmmd…。但是,前一行会出错:该命令以非零状态退出。当终端中的相同命令退出时,我不明白为什么会发生这种情况。

这会有什么用呢?还有一种更好的方式,我应该使用。

2 个答案:

答案 0 :(得分:2)

which命令使用shell环境变量$PATH来搜索不同的目录。像whereis这样的类似命令将使用sysctl并查找属性user.cs_path。不同之处在于whereis无论您当前处于何种环境,都会提供相同的输出。如果变量which在shell之间不同,$PATH可以返回不同的结果。

终端和do shell script命令之间的区别在于它们使用两个不同的shell。终端可能正在你的机器上使用bash而do shell script正在使用sh,这实际上是bash但在另一种模式下运行。在终端中使用echo $PATH shell命令并使用do shell script时,您将获得不同的结果。这解释了为什么do shell script命令中缺少路径。可能使用whereis在shell脚本和终端中都没有结果,因为它搜索的目录数量较少。

对我来说,解决这个问题的最简单方法是,如果有人想要与终端中相同的输出,只需调用与终端相同的shell,而不是尝试从它们复制变量。您可能想要使用的命令是:

do shell script "bash -l -c 'which <command>'"

答案 1 :(得分:0)

我猜测命令在终端窗口中有效,因为您已添加.bashrc或其他任何路径。 快速修复终端windo中的echo $PATH,将结果复制到剪贴板,然后使用export PATH=<your paths> ;添加do shell脚本命令。 (你真的必须用分号结束它。)现在你可以使用which命令找到你的东西,我建议使用which -a,这样你就可以得到你所有出现的列表实用程序。