在對Mavericks發行版中的整理了OSX的PATH問題之後,問題又在優勝美地再次出現了!!!
所以我想模仿Mac OSX 10.10 Yosemite新發行版中的舊 launch.conf
功能,以便在 Carbon這樣的GUI應用程序中使用PATH環境變量可以使用Emacs或 RStudio。我使用stackoverflow用戶 ursa的好主意來設置一個Shell腳本,該腳本通過 launchctl
配置環境變量。 (請參見他的stackoverflow答案此處。)這適用於大多數環境變量,但不適用於PATH變量。
1。我做了什麼?
首先,我寫了 /etc/environment.rc
腳本,如下所示:
launchctl setenv PATH / Users / halloleo / bin:/ usr / texbin:/ usr / local / bin:/ usr / bin:/ bin:/ usr / sbin:/ sbinlaunchctl setenv JAVA_HOME /usr/local/jdk1.7launchctl setenv ENVIRONMENT_RC“是”
然後,我為 launchd
創建了plists(這些附件以及下面附錄中提到的其他腳本的列表)。然後我用
$ sudo launchctrl load激活了它們...
然後我在外殼初始化文件中禁用了 path_helper
實用程序 / etc /
配置文件,以便它不會覆蓋 environment.rc
設置。最後,我重新啟動了計算機。
2。有什麼作用?
啟動終端時,根據 environment.rc
設置了新的環境變量 JAVA_HOME
和 ENVIRONMENT_RC
>,但PATH設置為
/ usr / bin:/ bin
為了確保沒有妨礙我的 bash
初始化文件而是(在附錄中)編寫了一個小python腳本來顯示當前環境中的變量,我通過雙擊 Platypus包裝器直接執行此操作。再次設置新變量,而PATH為系統默認值。
那為什麼我可以設置其他變量,但不是 PATH變量呢?而我該如何以統一的方式解決這個問題?
更新:
情況非常令人困惑:shell(至少在Terminal或Emacs中使用 bash
)將獲取您通過 launchctl
設置的PATH,但其他GUI應用程序則不會。通過Platypus直接調用的上述最小python腳本不會顯示您的自定義路徑。甚至Emacs本身也不知道正確的路徑:例如,您注意到了當您發出Emacs命令 M-x ispell-buffer
時;如果只是在您的自定義路徑上,則找不到emacs嘗試調用的unix工具 ispell
。
附錄
net.halloleo.environment.plist
, / Library / LaunchDaemons /
中啟動的配置文件:
<?xml版本=“ 1.0”編碼=“ UTF-8”?><!DOCTYPE plist PUBLIC“-// Apple // DTD PLIST 1.0 // EN”“ http://www.apple.com/DTDs/對propertyList-1.0.dtd“><plist版本=”1.0“><dict> <key>KeepAlive< / key> <false / > <key>Label< / key> <string>net.halloleo.environment< / string> <key>ProgramArguments< / key> <array> <string> / bin中/ sh< / string> <str ing>的/ etc / environment.rc< / string> < / array> <key>RunAtLoad< / key> <true / > <key>WatchPaths< / key> <array> <string>的/ etc / environment.rc< / string> < / array>< / dict>< / plist>
net.halloleo.environment-user.plist
, / Library / LaunchAgent中啟動的配置文件/
:
<?xml version =“ 1.0” encoding =“ UTF-8”?><!DOCTYPE plist PUBLIC“-/// Apple // DTD PLIST 1.0 // EN“”http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist版本=“1.0”><dict> <key>KeepAlive< / key> <false / > <key>Label< / key> <string>net.halloleo.environment-user< / string> <key>ProgramArguments< / key> <array> <string> / bin / sh< / string> <string> / etc /環境ent.rc< / string> < / array> <key>RunAtLoad< / key> <true / > <key>WatchPaths< / key> <array> <string>的/ etc / environment.rc< / string> < / array>< / dict>< / plist> 代碼>
/ etc / profile ,修改後的bash啟動文件:
#sh(1)#的系統範圍.profile,如果[-x / usr / libexec / path_helper];然後#eval`/ usr / libexec / path_helper -s`#fiif [“ $ {BASH-no}”!=“ no”];然後[-r / etc / bashrc] &&。 / etc / bashrcfi
show_environ.py
,該腳本顯示所有環境變量:
導入osprint(os.environ)