Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 什么决定了NSTask默认路径?为什么它与终端不同_Macos_Cocoa - Fatal编程技术网

Macos 什么决定了NSTask默认路径?为什么它与终端不同

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

我试图从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/sbin:/sbin:/usr/local/bin
是UNIX使用的正常路径,正如NSTask文档所说(重点添加):

任务在由当前值定义的环境中运行 对于多个项目:当前目录、标准输入、标准 输出、标准误差和任何环境变量的值。 默认情况下,NSTask对象从进程继承其环境 这就启动了它


因此,您的NSTask会获取启动Cocoa应用程序的路径。

这可能是未定义的。最好测试要运行的二进制文件,并使用完整路径执行它。这只会将问题向后移动一步。我从任务栏启动。我也从任务栏启动终端,但路径不同。那么任务栏继承了什么样的环境呢?尽管看起来很明显,它继承了一个环境,
PATH=/usr/bin:/bin:/usr/sbin:/sbin
:-)