bash 在 RHEL 6 上不读取 .bashrc

bash 在 RHEL 6 上不读取 .bashrc

机器 A --RHEL 7 并更新。
机器 B — RHEL 6 并已更新。

如果我在 A (RHEL 7) 上执行此操作

SSH B

我进入了,就像我应该的那样,但我的 .bashrc 尚未运行。这对我来说是新的行为。我.bashrc要在机器 B (RHEL 6) 上运行。我对/etc/ssh/sshd_config和 进行了比较/etc/ssh/ssh_config,它们是不同的,但我不明白为什么这些很重要。

ssh_config仅空格和注释不同。

是的,我看到了这些东西,但即使如此,它也因为小于/大于其中的内容而破坏了 diff 输出。里面有什么我应该关心的吗?我对空格、注释和环境变量 ( AcceptEnv) 进行了修改,这就是差异归结为的内容。

6面

Protocol 2

7 面

HostKey /etc/ssh/ssh_host_ecdsa_key
AuthorizedKeysFile  .ssh/authorized_keys
UsePrivilegeSeparation sandbox

那么,我该去哪里查找我的.bashrc无法运行的原因呢?我的.profile,再说一遍:

alias lo='exit'
alias l='ls -CF'
alias ..='cd ..'

和我的.bashrc

PRINTER=its1
export PRINTER


DISPLAY=jgs:0.0
export DISPLAY

PATH=/usr/bin:/usr/sbin:/bin:/sbin:/opt/bin:/home/gl/bin:.

export PATH

PROXY=whiteproxy.arlut.utexas.edu:3128
export PROXY

cd /home/gl

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

/etc/bashrc是库存。

答案1

~/.bashrc 文件并不总是被读取:请参阅Bash 启动文件在手册中。

您的 ~/.bash_profile (或 ~/.profile)是否调用您的 .bashrc 文件?这通常出现在 .profile 文件中:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

答案2

也许文档令人困惑,但 Bash 的标准行为是在交互式登录 shell 上获取您的“配置文件”(.bash_profile、.bash_login、.profile,以该顺序中第一个找到的为准),在交互式非登录 shell 上获取 .bashrc。

sshd 通常会生成一个登录 shell,其中打开 X11 终端窗口通常是一个非登录 shell。

因此,当您 ssh 到计算机时,您不应期望读取 .bashrc。

也就是说,我通常建议用户在他们的“个人资料”中添加如下行

[[ -r ~/.bashrc ]] &&  source ~/.bashrc

最后,Bush 永远不会直接读取 /etc/bashrc,并且您在 bash 手册页中找不到任何提及它的内容。这是 RedHat 添加的文件,并且期望您的 ~/.bashrc 文件将获取它。创建帐户时应位于主目录中的默认 ~/.bashrc 应该执行此操作。如果没有,您应该在 /etc/skel 目录中找到一个示例。

答案3

最后,我.bashrc.profile.对我来说,这意味着.profile除了运行之外必须为空,.bashrc以避免循环引用和其他混乱。

正如我在手册页中读到的那样,sshd应该调用.bashrc,但是,哦,好吧,我有一个解决方法。

相关内容