AppleScript:'Which <command>' 以非零状态退出

AppleScript: 'Which <command>’ exited with non zero status

我知道当用 do shell script 调用 shell 命令时它不会搜索所有位置,所以我应该使用完整路径来命令。因此,我现在做的是set cmmd to (do shell script “which <command>”),然后是do shell script cmmd…。但是,前一行给出了一个错误:The command exited with non-zero status。我不明白为什么会这样,当终端中的相同命令正常退出时。

解决这个问题的方法是什么?还有我应该使用的更好的方法吗?

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

which命令使用shell环境变量$PATH在不同的目录中搜索。 whereis 等类似命令将使用 sysctl 并查找 属性 user.cs_path。不同之处在于,无论您当前处于哪个环境,whereis 都会给出相同的输出。如果变量 $PATH 之间不同,which 可以 return 不同的结果shells.

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

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

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