題:
如何為Finder啟動的應用程序設置PATH
Caffeine Coma
2012-05-19 16:10:52 UTC
view on stackexchange narkive permalink

通過Finder啟動的應用似乎不遵守 .bash_profile 中設置的PATH。因此,當我嘗試從IDE(Intellij)運行代碼時,我將無法再訪問 / usr / local / bin 中的程序,該程序通常添加到終端的我的路徑中。

顯然是 .MacOSX / environment.plist 曾經是這樣做的方式,但在Lion中不再起作用。

如何我為Finder啟動的應用程序設置了 PATH 嗎?

您確定您接受的解決方案適用於10.8嗎?
@SorinSbarnea(我知道這很舊,但是)我可以驗證[當前接受的答案](http://apple.stackexchange.com/a/51678/12592)在OS X 10.8.3上對我有效還可以使用[建議的塢站重新啟動hack](http://apple.stackexchange.com/questions/51677/how-to-set-path-for-finder-launched-applications?lq=1#comment82320_51678)。 (不過,我設置了一個不同的環境變量,以防萬一,不要設置$ PATH。)
另請參見。它幾乎是重複的。
八 答案:
Rene Larsen
2012-05-19 16:54:42 UTC
view on stackexchange narkive permalink

如果您使用的是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  
我最終使用:“ launchctl setenv PATH $ PATH”。通過“ $ p”附加現有的launchctl路徑最終會在每次打開外殼程序時重複該路徑。
同樣值得注意的是-在啟動外殼程序(通過終端)之前,launchctl將具有默認路徑,並且自定義路徑將不可用。這驅使我有點想調試東西,直到我弄清楚發生了什麼。如果我在打開外殼之前啟動了Intellij,則路徑將是錯誤的。似乎真正的解決方案是在系統範圍內配置launchctl,而不是由某些用戶通過登錄Shell進行配置。
**在OS X 10.8上不起作用**-在Eclipse和IntelliJ上嘗試過-從它們運行`set | grep PATH`總是會返回`PATH = / usr / bin:/ bin:/ usr / sbin:/ sbin`
在帶有eclipse的OS X 10.8上,它仍然對我有用,所以我不知道您在做什麼錯?
也不適用於我的(10.8.1)
您已將IDE設置為我的第二個答案?到目前為止,我對任何10.8版本(10.8.0、10.8.1和10.8.2)都沒有任何問題,我使用了已描述的設置。
您可以在運行`launchctl`之後嘗試重新啟動擴展塢:`osascript -e'告訴應用程序“擴展塢”以退出”。那似乎為我解決了。
即使告訴Dock重新啟動,在10.9上對我也不起作用。編輯/etc/launchd.conf並重新啟動確實對我有用。 http://serverfault.com/questions/16355/how-to-set-global-path-on-os-x/277034#277034
我只能為自己說話,但所描述的內容仍然可以在10.9上為我工作-並且在即將到來的10.10上也可以使用。
無論是否重新啟動擴展塢,launchctl setenv PATH在我的10.10.4上均不起作用。有趣的是,launchctl getenv PATH在設置之前為空。
大!在OS X 10.9.5中它就像一個咒語:)
這對我在10.12中有效,但僅適用於一次。重新啟動機器後,效果會消失。
@Dover8我在10.12.3上看到了相同的內容,但此答案有效,但是重新啟動後,解決方案中斷了。
我認為你們需要在重新啟動後再次運行命令(理想情況下是自動運行),以使其繼續工作。
這在10.11.6上根本不適合我
Rene Larsen
2012-05-20 19:39:45 UTC
view on stackexchange narkive permalink

為了回答您對“新”問題的疑問,我決定寫另一個答案-因為它更容易用示例進行解釋。

一種在啟動您的環境時加載環境變量的方法選擇的工具(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時,應該設置環境變量。 >

+1可提供清晰準確的解釋,並且在六年後的今天,它仍然適用於High Sierra10.13.x。
brki
2015-07-31 13:10:23 UTC
view on stackexchange narkive permalink

在OS X 10.10 Yosemite上,我使用了以下命令:

  sudo launchctl config用戶路徑<my路徑設置>  

請注意,他設置了launchtl 所有用戶的路徑。這對於我的用例來說效果很好。請注意,系統將要求您重新啟動計算機以使效果生效。

您必須重新啟動所有應用程序才能使效果生效。 (不適用於重新啟動後在登錄時重新打開的應用程序。)(感謝@Brecht Machiels。)

這似乎對登錄時重新打開(關閉時已打開)的應用程序的PATH環境變量沒有影響。
這個答案對我有用。具體來說,要訪問Brew管理的可執行文件,我必須`sudo launchctl config用戶路徑/ usr / local / bin:/ usr / bin:/ bin:/ usr / sbin:/ sbin`並重新啟動。
這是為基於Homebrew的應用程序添加/ usr / local / bin的最佳答案。民間請投票給這個答案!它也可以在10.11和10.12中工作(本人未在10.13中進行測試)。在大多數情況下,無需弄亂“ environment.plist”。
這對我有用,而可接受的答案沒有
[這篇文章](https://apple.stackexchange.com/a/315876/40153)解釋瞭如何反轉此設置或設置launchctl系統默認值。
確認可在macOS 10.15 Catalina上使用。
Flori
2013-01-24 18:34:09 UTC
view on stackexchange narkive permalink

在Mountain Lion上,所有 / etc / paths /etc/launchd.conf 編輯都沒有任何效果!

Apple的開發人員論壇說:

”“更改.app本身的Info.plist,使其包含帶有所需環境變量的“ LSEnvironment”字典。

〜/ .MacOSX /不再支持environment.plist。“

所以我直接編輯了應用程序的 Info.plist (在“ AppName.app”上單擊鼠標右鍵(在本例中為SourceTree) ),然後“ 顯示包內容”))

Show Package Contents

,並添加了一個新的密鑰/字典對:

  <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文檔

enter image description here

現在該應用程序(在我的情況下為SourceTree)使用給定的路徑並與git 1.9.3:-)

PS:當然,您必鬚根據特定的路徑需要調整Path條目

這是真的?我看到許多帖​​子中的信息相互矛盾,其中有些顯然很陳舊,但有些似乎是最近的。無論如何,我什至沒有(在10.8.2上)`/ etc / launchd.conf`。大概,即使規則沒有規定應用程序*應*將其Info.plist文件用作路徑,它們仍可能使用其他文件-/etc/launchd.conf、/etc/paths/或/ etc / paths.d / *`或`〜/ .MacOSX / environment.plist。可以肯定地說,*實際上*,可以在這些文件中的任何一個中設置Mountain Lion中GUI應用程序的路徑嗎?
在嘗試用我的Maverics和eclipse嘗試lauchd.conf等/路徑後,該Info.plist對我唯一有效。實際上這還不能立即生效,您需要記住兩件事:1.運行`/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f / Applications / eclipse / Eclipse。另一個答案中給出的app`,在更改plist並在其中添加** full path **之後,您將無法像在配置文件腳本中那樣使用現有的PATH。
這適用於Sierra(10.12)。但是,正如@JaakL指出的那樣,仍然有必要運行`lsregister`命令。
Nick Barnes
2013-06-26 20:22:27 UTC
view on stackexchange narkive permalink

在山獅(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 >。那隻是我,所以我不在乎。

您應該發現Terminal進程會選擇您設置的`PATH`值,但是:創建新終端時,它將啟動登錄shell,如果使用bash,它將執行`/ etc / profile`來初始化PATH到從/ usr / libexec / path_helper返回的值。如果選擇** Shell> New Command…**並運行`env`(不在shell中),您應該發現`PATH`是您通過launchd設置的值。
Klas Mellbourn
2019-11-29 05:15:03 UTC
view on stackexchange narkive permalink

受@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上運行

adampasz
2015-10-23 03:20:12 UTC
view on stackexchange narkive permalink

嘗試在〜/ .profile或〜/ .bash_profile或〜/ .zprofile(對於zsh)中設置路徑。這對於VimR來說對我有用-從擴展塢啟動時它不讀取PATH,但是從終端啟動時它可以工作。順便說一句,我在OSX 10.11上運行。

我對此沒有足夠的了解,無法對它的工作原理做出很好的解釋,在線上有很多關於不同配置文件的解釋。以及它們的作用: https://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment

在這裡看到類似的討論: https://stackoverflow.com/questions/3344704/path-variable-not-properly-set-in-gvim-macvim-when-it-is-opened-from-the-finder/ 24542893#24542893

該問題詢問如何對從Doc啟動的應用程序執行此操作,這與從Finder啟動的應用程序相同,您說您的答案不適用-我們可以確切地解釋為什麼/不起作用
user1814739
2013-07-16 08:42:10 UTC
view on stackexchange narkive permalink

在Mac OS X 10.8.4(Mountain Lion)上,路徑環境包含此文件中列出的路徑:

  / etc / paths  

您可以使用以下命令,使用命令行工具(例如 vim )編輯該文件:

  sudo vim / etc / paths  


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...