為什麼我的 ~/.bash_profile 不起作用?
我正在使用 Linux Mint。我的登錄 shell (
cat /etc/passwd | grep myUserName
) 是 bash。在我啟動我的圖形桌面環境並從中執行終端模擬器後,我可以看到它
.bash_profile
不是來源(其中export
編輯的環境變數未設置)。ctrl
但是,如果我從文本控制台 ( ++alt
)登錄或從終端模擬器F1
手動執行,則工作正常。bash -l``.bash_profile
當我認為
.bash_profile
應該在 X 啟動時獲取並且所有export
‘ed vars 應該在終端中可用,從 X 執行時,我錯了嗎?PS 將所有東西放入
.bashrc
並從中採購.bash_profile
併不是一個好主意(https://stackoverflow.com/questions/902946/):環境的東西應該只採購一次。
當它是登錄 shell 時,該文件
~/.bash_profile
由 bash 讀取。這就是您在文本模式下登錄時所得到的。當您在 X 下登錄時,啟動腳本由
/bin/sh
. 在 Ubuntu 和 Mint 上,/bin/sh
是dash,而不是 bash。Dash 和 bash 都具有相同的核心功能,但 dash 堅持這些核心功能是為了快速和小巧,而 bash 以需要更多資源為代價添加了許多功能。通常將 dash 用於不需要額外功能的腳本和 bash 用於互動使用(儘管zsh 有很多更好的功能)。顯示管理器(您在其中鍵入使用者名和密碼的程序)和桌面環境的大多數組合從、或任何適用
~/.profile
的登錄腳本中讀取。所以把你的環境變數定義放在. 確保僅使用破折號支持的語法。/etc/X11/Xsession``/usr/bin/lightdm-session``/etc/gdm/Xsession``~/.profile
那麼你應該把什麼放在哪裡呢?
- 如果 shell 是互動式的,則很好的
.bash_profile
載入.profile
和載入。.bashrc
. ~/.profile if [[ $- == *i* ]]; then . ~/.bashrc; fi
- 在
.profile
中,放置環境變數定義和其他會話設置,例如ulimit
.- 在
.bashrc
中,放置 bash 互動設置,例如別名、函式、完成、鍵綁定(不在 中.inputrc
),…