/bin/bash shell 中未加载 .bashrc

/bin/bash shell 中未加载 .bashrc

当我通过 ssh 进入服务器(4.3.3-2-ARCH)时,我的 .bashrc 未被加载(但是,我可以通过获取它来手动加载它)。

我的主文件夹中没有其他文件,例如 .profile。shell 也正确

$ echo $SHELL
/bin/bash

当我使用登录时ssh -t myserver /bin/bash,我的.bashrc 已正确加载。

在 SSH 详细模式下,我确实看到使用最后一个命令加载了 /etc/bash.bashrc 和 ~/.bashrc。使用默认 ssh 命令时,它们均未加载...

使用默认 ssh 命令时,我应该配置什么才能加载 .bashrc (和 /etc/bash.bashrc)?

答案1

~/.bashrc文件是为交互式非登录 shell 加载的,这就是/bin/bash从 ssh 运行能够按预期进行的原因。

对于登录 shell(以及其他 shell),读取 ~/.bash_profile。通常,您的配置文件中~/.bash_profile包含类似以下内容的内容:

if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

~/.bashrc如果您的 shell 是登录 shell,这将确保已加载。

如果您~/.bash_profile包含上述内容且未~/.bashrc被加载,您可以set -x照常使用来调试脚本。

答案2

通常,当创建用户时,它会将一堆文件复制到您的新主目录中(如果您选择创建一个)。

您可以检查/etc/skel目录中的这些文件。应该有.bash_profile您期望的文件。

答案3

与前面的情况一样,似乎用户没有分配 shell,因此它只是将字符显示$为提示符。
我必须通过运行以下命令为用户分配一个 shell:

sudo usermod --shell /bin/bash username

此后,用户自动使用 bash shell 登录。

答案4

Bash 根据 shell 的调用读取文件组:

  • 登录 shell:基本上是附加到 tty 并来自身份验证过程的 shell。此类 shell 读取 /etc/profile、~/.bash_profile、~/.bash_login 和 ~/.profile
  • 非登录交互式 shell:无需身份验证即可打开的交互式 shell。此类 shell 读取 /etc/bash.bashrc 和 ~/.bashrc

您可以在以下位置找到更多信息: man bash ,部分 INVOCATION

相关内容