始终在基于 AlmaLinux / RedHat 的系统中获取 bashrc

始终在基于 AlmaLinux / RedHat 的系统中获取 bashrc

我的基础设施主要由 Ubuntu 机器和许多用户组成。我们喜欢使用X2GO进行远程访问,效果很好。我们现在有一台 AlmaLinux 8.8 机器。当使用 X2GO 登录并打开终端时,提示符很混乱,只写了类似bash-4.4$.我们发现这是因为在 X2GO 中打开终端不是登录 shell(抱歉,不再那么确定,请参阅编辑),因此/etc/bashrc不是由/etc/profile. Ubuntu 系统以某种方式配置为无需.bashrc用户主目录中的本地目录即可工作。因此,所有主目录都是在没有.bashrc.

我想在 AlmaLinux 机器上通过始终获取/etc/bashrc.这是因为我无权访问为新用户创建新家的机制,并且我不想创建/告诉所有用户拥有本地.bashrc.有没有办法实现这一点?我确实在 Alma 机器上拥有 sudo 权限。

[编辑]再次检查后,我在以下位置注意到了这个块/etc/profile

if [ -n "${BASH_VERSION-}" ] ; then
        if [ -f /etc/bashrc ] ; then
                # Bash login shells run only /etc/profile
                # Bash non-login shells run only /etc/bashrc
                # Check for double sourcing is done in /etc/bashrc.
                . /etc/bashrc
       fi
fi

答案1

你的解释有点过了。登录 shell 确实会读取profile文件族,但不会读取文件bashrc本身;它是非登录外壳,不读取profile但读取bashrc。至于 Ubuntu,是的,它可能被设置为没有 local .bashrc,大概是因为没有 at /etc/skel。您可以在那里添加一个默认文件,然后为所有新用户复制该文件。

至于让你的登录 shell 读取bashrc,我个人建议改为使用你需要的设置/etc/profile,但如果你不想这样做,你可以制作/etc/profilesource /etc/bash.bashrc。只需将其添加到您的/etc/profile

if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
  if [ -f /etc/bash.bashrc ]; then
    . /etc/bash.bashrc
  fi
fi

/etc/bash.bashrc如果 shell 读取的/etc/profile是 bash 并且不是 bash as /bin/sh(POSIX 模式下的 bash),这将是 source 。一些 Linux 发行版默认这样做,据我所知,只有 Debian 系列中的发行版,但也许其他发行版也是如此。请注意,这假设您/etc/bash.bashrc有代码在 shell 不具有交互性时退出。在我的 Arch 上,这看起来像:

# If not running interactively, don't do anything
[[ $- != *i* ]] && return

如果您的 中没有类似的行/etc/bash.bashrc,请添加一行,这样您就不会在您确实不希望 bashrc 中的设置处于活动状态的非交互式 shell 中读取它。

相关内容