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