Macos 什么决定了NSTask默认路径?为什么它与终端不同
我试图从Cocoa程序启动的NSTask/bin/sh中执行命令行工具(BBEdit的“bbdiff”) 这失败了,尽管我可以从终端成功启动 我找到了原因Macos 什么决定了NSTask默认路径?为什么它与终端不同,macos,cocoa,Macos,Cocoa,我试图从Cocoa程序启动的NSTask/bin/sh中执行命令行工具(BBEdit的“bbdiff”) 这失败了,尽管我可以从终端成功启动 我找到了原因bbdiff位于/usr/local/bin中 终端中使用的路径为 /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin 但是,NSTask启动的bash shell中使用的路径仅为 /usr/bin:/bin:/usr/sbin:/sbin 为什么不同?我认为/usr/bin:/bin:/usr/sbi
bbdiff
位于/usr/local/bin
中
终端中使用的路径为
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
但是,NSTask启动的bash shell中使用的路径仅为
/usr/bin:/bin:/usr/sbin:/sbin
为什么不同?我认为/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
是UNIX使用的正常路径,正如NSTask文档所说(重点添加):
任务在由当前值定义的环境中运行
对于多个项目:当前目录、标准输入、标准
输出、标准误差和任何环境变量的值。
默认情况下,NSTask对象从进程继承其环境
这就启动了它
因此,您的NSTask会获取启动Cocoa应用程序的路径。这可能是未定义的。最好测试要运行的二进制文件,并使用完整路径执行它。这只会将问题向后移动一步。我从任务栏启动。我也从任务栏启动终端,但路径不同。那么任务栏继承了什么样的环境呢?尽管看起来很明显,它继承了一个环境,
PATH=/usr/bin:/bin:/usr/sbin:/sbin
:-)