当我通过 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