2012-12-10 41 views
0

我試圖從Cocoa程序啓動的NSTask/bin/sh執行命令行工具(BBEdit的「bbdiff」)。什麼決定了NSTask的默認路徑 - 以及它爲何與終端不同

儘管我可以從終端成功啓動,但失敗了。

我追查了原因; 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

+0

這可能是未定義的。最好測試你想運行的二進制文件,並使用完整路徑執行它。 – trojanfoe

回答

0

由於NSTask文檔中使用的正常路徑說(強調):

任務當前值 數項規定的環境內工作:當前目錄,標準輸入,標準 輸出,標準錯誤以及任何環境變量的值。 默認情況下,NSTask對象從啓動它的進程 繼承它的環境。

所以你的NSTask獲得PATH用來啓動你的Cocoa應用程序。

+0

這只是將問題向後移動一步。我從任務欄啓動。我也從任務欄啓動終端,但PATH不同。那麼Taskbar會繼承什麼樣的環境? – Milliways

+0

冒着看似明顯的風險,它繼承了一個環境,其中'PATH =/usr/bin:/ bin:/ usr/sbin:/ sbin' :-) –