问题描述
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