/ etc / profile未被采购

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

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

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

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

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

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

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

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

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

我对rvm函数的调用, [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/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 

如果你有ZSH或OH-MY-ZSH,你的个人资料是/ etc / zprofile

我实际上找到了那些不喜欢完全重启盒子的人,除非绝对需要以下……

您无需重新启动整个计算机即可使/etc/profile更改生效。 您只需重新启动XWindows Desktop GUI,即可重新读取配置(如果它是作为系统范围重启的一部分启动的话)。

对我来说,我使用的是使用LightDM的xUbuntu,但您可以在任何可执行文件中调用当前桌面。

首先,您不能在桌面GUI本身内部使用终端仿真器来执行此操作(至少不使用LightDM),您需要使用SSH或辅助控制台(如果您按住Ctrl + Alt并按F键或数字键你应该从图形桌面登录或屏幕上移到普通的终端窗口)。 我还建议你关闭任何远程桌面的东西,如VNC,如果你使用SSH(显然SSH可以连接你只是不希望一个开放的VNC窗口轮询显示0,而它试图重新启动,因为这可能会挂起重启它等待你终止VNC会话)。

我一直使用SSH这样做,这是一个很大的救星,特别是当你不是在你的机器上,并且不想等待完全重启和重新连接时:-D

现在这个简单的部分曾经处于“辅助”终端或SSH问题:( 是的,这会杀死你当前的会话,请确保你不介意,保存任何打开的文件或工作)

 sudo service lightdm restart 

等待一分钟,因为它杀死桌面,然后再次启动它(这可能需要几秒钟,因为事情停止,然后在开始时再次执行)

就是这样,现在当你回到控制台0或者你再次使用VNC进行连接时,你会看到登录提示并正常登录,如果你打开一个终端模拟器然后发出你的命令,你现在应该没有任何问题,因为一切都是重新获得的,就像你完全重启机器一样。

请记住,如果你使用终端模拟器从桌面环境本身发出sudo service lightdm restart [或stopstart ,whatever],那么命令就会挂起,似乎没有任何事情发生。 这是因为您当前正在使用该控制台(也称为显示器)0,因此它无法完全关闭并重新启动,因为它在运行命令之前等待桌面不被使用。

最后注意:我没有尝试在终端仿真器中从桌面内部对环境进行重新启动,然后切换到另一个可能然后重新启动它的控制台,但是如果您已经要切换控制台那么为什么不运行命令从那里它应该是反正的?

echo“.profile”>>〜/ .bashrc

然后打开另一个窗口。 我认为这是一种简单的方法。