通過Finder啟動的應用似乎不遵守 .bash_profile
中設置的PATH。因此,當我嘗試從IDE(Intellij)運行代碼時,我將無法再訪問 / usr / local / bin
中的程序,該程序通常添加到終端的我的路徑中。
顯然是 .MacOSX / environment.plist
曾經是這樣做的方式,但在Lion中不再起作用。
如何我為Finder啟動的應用程序設置了 PATH
嗎?
通過Finder啟動的應用似乎不遵守 .bash_profile
中設置的PATH。因此,當我嘗試從IDE(Intellij)運行代碼時,我將無法再訪問 / usr / local / bin
中的程序,該程序通常添加到終端的我的路徑中。
顯然是 .MacOSX / environment.plist
曾經是這樣做的方式,但在Lion中不再起作用。
如何我為Finder啟動的應用程序設置了 PATH
嗎?
如果您使用的是10.7而非10.8,則以下解決方案效果很好:
我在eclipse上遇到了同樣的問題,但是現在我添加了將以下內容添加到我的 .bash_profile
中,然後就可以了。
export PATH = some_path:another_pathlaunchctl setenv PATH $ PATH
在如果您想保留原始路徑不變,請使用
p = $(launchctl getenv PATH)launchctl setenv PATH / my / new / path:$ p
而不是(或者只是 launchctl setenv PATH / my / new / path:$(launchctl getenv PATH)
)。
注意::更改launchctl PATH在“重新啟動” Dock之前不會生效。使用以下命令殺死當前的新Dock進程後,該進程將自動啟動:
killall Dock
為了回答您對“新”問題的疑問,我決定寫另一個答案-因為它更容易用示例進行解釋。
一種在啟動您的環境時加載環境變量的方法選擇的工具(IDE)就像可以使用Eclipse一樣完成-我認為您的工具(IDE)也必須具有類似的結構。
如何在Eclipse中完成它- https ://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set
(稍微重寫一下環境變量)
在Eclipse應用程序捆綁包目錄 /Applications/Eclipse.app/Contents/MacOS
中創建一個名為“ eclipse.sh”的空文本文件。在文本編輯器中打開eclipse.sh,然後輸入以下內容:
#!/ bin / sh。 〜/ .bash_profilelogger“ $(dirname \” $ 0 \“)/ eclipse” exec“ $(dirname \” $ 0 \“)/ eclipse”“ $ @”
在終端集中外殼腳本eclipse.sh的可執行標誌,即:
chmod + x /Applications/Eclipse.app/Contents/MacOS/eclipse.sh
打開Eclipse.app Info.plist,然後將CFBundleExecutable鍵的值從eclipse更改為eclipse.sh。
MacOS X不會自動檢測到Eclipse.app的Info.plist已更改。因此,您需要使用 lsregister命令
:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices在終端中強制更新LaunchService數據庫。 framework / Support / lsregister -v -f /Applications/Eclipse.app
下一次從Dock或Finder啟動Eclipse.app時,應該設置環境變量。 >
在OS X 10.10 Yosemite上,我使用了以下命令:
sudo launchctl config用戶路徑<my路徑設置>
請注意,他設置了launchtl 所有用戶的路徑。這對於我的用例來說效果很好。請注意,系統將要求您重新啟動計算機以使效果生效。
您必須重新啟動所有應用程序才能使效果生效。 (不適用於重新啟動後在登錄時重新打開的應用程序。)(感謝@Brecht Machiels。)
在Mountain Lion上,所有 / etc / paths
和 /etc/launchd.conf
編輯都沒有任何效果!
Apple的開發人員論壇說:
”“更改.app本身的Info.plist,使其包含帶有所需環境變量的“ LSEnvironment”字典。
〜/ .MacOSX /不再支持environment.plist。“
所以我直接編輯了應用程序的 Info.plist
(在“ AppName.app”上單擊鼠標右鍵(在本例中為SourceTree) ),然後“ 顯示包內容
”))
,並添加了一個新的密鑰/字典對:
<key>LSEnvironment< / key><dict> <key>PATH< / key> <string> /用戶/弗洛裡/ .rvm /寶石/紅寶石1.9.3-P362 / bin中:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/ bin:/用戶/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/us r / local / bin:< / string>< / dict>
(請參閱: Apple的LaunchServicesKeys文檔)
現在該應用程序(在我的情況下為SourceTree)使用給定的路徑並與git 1.9.3:-)
PS:當然,您必鬚根據特定的路徑需要調整Path條目
在山獅(10.8.4)上,對 $ PATH
進行了特殊處理。 launchctl setenv PATH / your / path:/ here
對隨後從Dock或從Dock啟動的Terminal.app或Emacs.app實例中的 $ PATH
無效。 Finder(而 launchctl setenv SPONG foo
可以正常工作)。另外, $ HOME / .launchd.conf
無效。 /etc/launchd.conf
是我發現到處正確設置PATH的唯一方法。不幸的是,那裡不能使用諸如 $ HOME
之類的envar,因此筆記本電腦上的所有用戶的 $ PATH code上都具有
/ Users / nb / bin
>。那隻是我,所以我不在乎。
受@brki答案的啟發,我編寫了此腳本。
它獲取 / etc / paths
的內容,並使用它來重建原始路徑(和 / usr / local / bin
),然後添加〜/ bin
和 / some / other
。
如果[-f / etc / paths];然後
ETC_PATHS = $(讀行時;執行
echo -n“ $ {line}:”
完成< / etc / paths)
PATH_OVERRIDE = $ {ETC_PATHS} $ {HOME} / bin:/ some / other
回顯“使用$ {PATH_OVERRIDE}覆蓋原始路徑/ usr / bin:/ bin:/ usr / sbin:/ sbin,以便gpg和node將位於Spotlight啟動程序的路徑上”
sudo launchctl配置用戶路徑$ PATH_OVERRIDE
科幻
我已經驗證了它可以在macOS Catalina 10.15.1上運行
嘗試在〜/ .profile或〜/ .bash_profile或〜/ .zprofile(對於zsh)中設置路徑。這對於VimR來說對我有用-從擴展塢啟動時它不讀取PATH,但是從終端啟動時它可以工作。順便說一句,我在OSX 10.11上運行。
我對此沒有足夠的了解,無法對它的工作原理做出很好的解釋,在線上有很多關於不同配置文件的解釋。以及它們的作用: https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment
在Mac OS X 10.8.4(Mountain Lion)上,路徑環境包含此文件中列出的路徑:
/ etc / paths
您可以使用以下命令,使用命令行工具(例如 vim
)編輯該文件:
sudo vim / etc / paths