Linux

除非手動啟動,否則 Bash 不會讀取 .bashrc

  • October 27, 2021

bash除非我從終端手動執行,否則不會.bashrc從互動式終端bash獲取:

$ bash

或手動獲取它:

$ source ./.bashrc

或執行:

$ st -e bash

我希望這是一些有用的輸出:

$ echo $TERM
st-256color

$ echo $SHELL
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_shell
login_shell     off

我在 CRUX Linux 3.0 上,我使用dwmand st. 我試過使用.bash_profile.profile沒有成功。

有任何想法嗎?

為什麼要採購它?您的預設 shell 不是 bash,而是sh

$ echo $SHELL
/bin/sh

在大多數現代系統中,sh它是基本 shell 的符號連結。例如在我的 Debian 上:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

在您的情況下,sh是一個連結,bash但是,如中所述man bash

如果使用名稱 sh 呼叫 bash,它會嘗試盡可能地模仿 sh 的歷史版本的啟動行為,同時也符合 POSIX 標準。

$$ … $$當作為名為 sh 的互動式 shell 呼叫時,bash 查找變數 ENV,如果已定義,則擴展其值,並將擴展值用作要讀取和執行的文件的名稱。由於作為 sh 呼叫的 shell 不會嘗試從任何其他啟動文件中讀取和執行命令,因此 –rcfile 選項無效。

–norc
如果 shell 是互動式的,則不要讀取和執行系統範圍的初始化文件 /etc/bash.bashrc 和個人初始化文件 ~/.bashrc。 如果 shell 作為 sh 呼叫,則預設情況下此選項處於啟用狀態。

因此,由於您的預設 shell 是sh,.bashrc不會被讀取。只需將預設 shell 設置為 bash 使用chsh -s /bin/bash.

在 .bash_profile 中確保您具有以下內容:

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
 . ~/.profile
fi

# If the shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
   . ~/.bashrc
fi

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