Bash

為什麼我的 ~/.bash_profile 不起作用?

  • March 21, 2018

我正在使用 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/shdash,而不是 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),…

另請參閱登錄 Shell 和非登錄 Shell 之間的區別?.bashrc 的替代品

引用自:https://unix.stackexchange.com/questions/88106