正確設置環境
我正在使用 zsh 和 gdm 來執行 gnome。前段時間我發現變數設置不正確。例如 LANG/LC_ALL 不正確(
""
而不是en_GB.UTF-8
)。我拆分
.zshrc
成.zshrc
和.profile
。在後者中,我設置了環境變數,但是如何在會話開始之前設置變數?我嘗試了一些選擇(.xinitrc
,.xsessionrc
),但似乎沒有一個有效。編輯澄清 - 我使用
.profile
並手動採購它.zshrc
。無論如何,它不會改變問題。
最簡單的方法是發明一台時間機器,拜訪設計 shell 啟動文件的各種人,並告訴他們清楚地區分三件事:
- 會話設置,例如環境變數;
- 會話啟動,例如,啟動命令行 shell 或視窗管理器或執行
startx
;- shell 初始化,例如別名、提示、鍵綁定。
以可移植的方式正確獲取 session 與 shell 並不難:登錄時初始化進入
.profile
(or.zprofile
, or.login
),shell 初始化進入.bashrc
or.zshrc
。我之前寫過關於zsh 與其他 shell的比較,.bash_profile
更多關於可移植性(主要是關於 bash),更多關於誰在閱讀..profile
剩下的問題是區分會話設置和會話啟動。大多數情況下,
~/.profile
在登錄時執行,可以兼作兩者,但也有例外:
如果您的登錄 shell 是 (t)csh 或 zsh,
~/.login
並且~/.zprofile
來源而不是~/.profile
. 同樣適用於 bash 和~/.bash_profile
,但這很容易通過~/.profile
從~/.bash_profile
.如果您在顯示管理器(xdm、gdm、kdm、…)下登錄,您是否
~/.profile
被讀取取決於程序的版本、您的發行版(Linux 或其他)以及您選擇的會話類型。
- 如果您指望顯示管理器為您啟動會話,您
.profile
必須設置環境變數但不能啟動會話(例如視窗管理器)。- X 會話的傳統配置文件是
~/.xsession
,同時進行會話設置和會話啟動。所以文件本質上可以是. ~/.xsession; . ~/.xinitrc
.~/.profile
之前的一些發行版源~/.xsession
。僅當您從顯示管理器中選擇“自定義”會話時,現代發行版才會提供源~/.xsession
,並且此類會話並不總是可用。- 您的會話管理器可能有自己的設置環境變數的方式。(這是桌面環境的可選部分,由您通過配置文件或登錄時選擇會話類型來選擇;不要將其與顯示管理器提供的會話啟動腳本混淆,後者在您的使用者下執行,但在整個系統範圍內選擇。是的,這是一團糟。)
總之,
~/.profile
是環境變數的正確位置。如果它沒有被讀取,請嘗試從那裡獲取它~/.xsession
(並從那裡啟動您的 X 程序),或尋找特定於系統的方法(這可能取決於您的發行版、顯示管理器(如果有)、會話類型(如果顯示管理器)和桌面環境或會話管理器)。