当前位置: 首页>>技术问答>>正文


/etc/profile未被采购

, ,

问题描述

11.04,我完全安装了我的系统。部分安装是安装rvm,它在/etc/profile.d/中粘贴rvm.sh。这不起作用,因为没有加载/etc/profile(它在/etc/profile.d/*.sh中加载每个+ r)。根据文档,只有在登录时运行bash时才会获取配置文件。为了验证这一点,我调用了bash --login,之后rvm可用。

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

我的问题是:有什么我做错了,或者是否有一些新的假设在Natty中打破了这个?我目前的解决方法是在~/.bashrc中使用source /etc/profile(这很糟糕,因为配置文件意味着在bashrc之前加载,但确实如此)。

最佳解决方案

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

快速解决您的问题是配置gnome-terminal以将bash作为登录shell启动,因此它将读取/etc/profile。为此,您必须在“编辑”菜单中可以从gnome-terminal “Profile Preferences”中启用“运行命令作为登录shell”。

我不建议这样做,因为它弄乱了~/.profile~/.bashrc之间的区别。理想情况下,~/.profile应该在登录期间执行仅需要一次的操作,而~/.bashrc应该执行每次bash启动时所需的操作。

有一个question and answer at superuser talking about the difference between bashrc and profile。阅读那里了解更多信息。

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

次佳解决方案

但是,有一个文件/etc/bash.bashrc由gnome-terminal读取,并且是“用于交互式bash(1)shell的system-wide .bashrc文件”。

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

第三种解决方案

以多用户身份安装RVM需要用户运行此命令:

(因为Ubuntu在登录时没有源/etc/profile.d)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1832.html,未经允许,请勿转载。