为什么在非登录 bash shell 会话期间未加载 /etc/profile?

Mar*_*arc 47 rvm bash login .profile

对于 11.04,我重新安装了我的系统。该安装的一部分是安装rvm,它rvm.sh/etc/profile.d/. 这不起作用,因为/etc/profile(加载每个 +r in /etc/profile.d/*.sh)没有被加载。根据文档,该配置文件仅在登录时运行 bash 时才来源。为了验证这一点,我调用了bash --login,之后rvm就可用了。

这在没有任何配置的以前版本的 Ubuntu 中对我有用。也就是说,全新安装的 10.10 将正确获取 profile/.d。

我的问题是:我做错了什么,还是在 Natty 中做出的一些新假设破坏了这一点?我目前的解决方法是source /etc/profilein ~/.bashrc(这很糟糕,因为配置文件是bashrc之前加载的,但可以解决问题)。

les*_*ana 54

默认情况下,gnome-terminal 不会将 bash 作为登录 shell 启动(我假设您的意思是 bash 在 gnome-terminal 内启动)。这意味着 bash 不会读取/etc/profile~/.profile. 正如您正确观察到的那样,如果作为登录 shell 启动,bash 将读取这些文件。

解决您的问题的快速方法是将 gnome-terminal 配置为将 bash 作为登录 shell 启动,以便它读取/etc/profile. 为此,您必须在可从编辑菜单访问的 gnome 终端“配置文件首选项”中启用“将命令作为登录外壳运行”。

我不建议这样做,因为这间食堂的区别~/.profile~/.bashrc。理想情况下,~/.profile应该只在登录期间~/.bashrc做一次需要的事情,而应该做每次 bash 启动时都需要的东西。

超级用户有一个问答,讨论 bashrc 和 profile 之间的区别。阅读那里了解更多信息。

从您的问题描述来看,rvm 脚本似乎只需要在登录期间加载一次。据我所知,Ubuntu 已将图形登录配置为读取/etc/profile/~/.profile. 这意味着,在注销并登录一次后,rvm 脚本应该处于活动状态。如果它仍然不起作用,那么可能需要为每个 bash 会话加载 rvm 脚本。如果是这种情况,那么bashrc脚本的位置更合适。

  • Ubuntu 11.04 在登录时似乎没有读取 `/etc/profile` 和 `~/.profile`。这很奇怪,因为它总是适用于旧版本。我认为这不是解决方案,而是解决方法。 (8认同)
  • @lesmana 有没有办法可以从 CLI 而不是 GUI 启用“将命令作为登录外壳运行”?我进入远程服务器并且无法在本地转发 X。 (2认同)

Dmi*_*tri 7

但是,有一个/etc/bash.bashrc 由 gnome-terminal 读取的文件,它是“用于交互式 bash(1) shell 的系统范围的 .bashrc 文件”。

我对 rvm 函数的调用[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"进入了那里,并且对于该系统上的几个用户来说效果很好。

  • 是的,显然,gnome-terminal 调用 bash 来读取该文件:如果您的 shell 是 ksh,那么 gnome-terminal 不会读取该文件,是吗?我是否建议您在继续使用诸如“无所事事”之类的挑衅性短语之前,先在字典中查一下“学究”一词。 (3认同)