除非手动启动,否则 Bash 不会读取 .bashrc

除非手动启动,否则 Bash 不会读取 .bashrc

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,并且使用dwmst。我尝试过使用.bash_profile.profile没有成功。

有任何想法吗?

答案1

在 .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

答案2

为什么它会来源?您的默认 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不会被读取。只需使用 .bashrc 将默认 shell 设置为 bash 即可chsh -s /bin/bash

相关内容