从我的Ubuntu .profile获取rvm只能手动工作,登录时无法工作

8

我在Ubuntu 10.04上使用Ruby版本管理器rvm时遇到了问题,无法从我的.profile文件中获取源代码。以下是代码:

[[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"

我发现它经常不按我的预期运行(例如,当我打开一个新的shell或启动一个新会话时,没有给我rvm程序);但是如果我执行

source .profile

在登录后的新终端中,它可以工作!为什么手动源化可以工作而自动登录时不行?


你使用的是哪个shell?你也有.bash_profile文件吗? - SimonJ
可能是重复的(或至少是相同的)问题:http://stackoverflow.com/questions/3982244/postinstall-rvmruby-version-manager-without-root-access - joschi
你如何登录?我正在使用gdm3,并尝试从/.xprofile中获取rvm,但是/.xprofile由/bin/sh运行,不支持该操作;在我的情况下(hack),我修改了/etc/gdm3/Xsession以使用#!/bin/bash。根据您登录的方式,检查是否真正使用.profile文件(例如PROFILE_USED=1; export PROFILE_USED)。如果是,则可能由错误的shell运行(它只应由/bin/sh“或更好的”运行);如果不是,请尝试.xprofile。你还少了一个],但这可能是一个打字错误。 - Thomas Luzat
4个回答

6
似乎Ubuntu处理登录脚本的方式与大多数其他Linux发行版不同。

http://ubuntuforums.org/showpost.php?p=9127226&postcount=6

上述帖子提到,在Ubuntu中,GDM登录不会像大多数其他Linux发行版那样处理.bash_profile或.profile。我不得不在~/.bashrc中放置加载RVM的行,这还没有引起任何问题。

3

假设您已经安装了RVM单用户,并且该用户的主目录是$HOME,则可以使用以下命令引用$HOME/.rvm。然而,在Ubuntu系统上,RVM通常是系统范围内安装的,因此您必须按如下方式引用RVM脚本:

在您的.bashrc文件中添加以下内容:

\# Set rvm path

[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"

在这一行之前,该行将退出并不执行其后的任何内容,对于交互式登录来说是可以接受的,但如果您正在使用非交互式SSH登录进行自动化目的,则可能会出现问题。

\# If not running interactively, don't do anything

[ -z "$PS1" ] && return

0
我在Ubuntu 16.04上使用Atom编辑器时遇到了一个问题,它无法识别RVM环境,因此找不到rubocop命令。但是当我从gnome终端启动Atom时,问题就不存在了。我发现应该在.profile中加载的RVM脚本~/.rvm/scripts/rvm在开头有以下几行:
if
  builtin test -n "${BASH_VERSION:-}" -o -n "${ZSH_VERSION:-}" -o -n "${KSH_VERSION:-}"
then
  ...
else
  return 0
fi

奇怪的是,当在登录时执行时,我发现$BASH_VERSION为空(而在gnome终端中它类似于4.3.46(1)-release),因此脚本会早期返回,导致RVM未能正确加载。我尝试将BASH_VERSION设置为任何值,它都可以正常工作。

这是从我的.profile中加载RVM的完整代码:

local rvm_home="${HOME}/.rvm"
export PATH="$PATH:${rvm_home}/bin"
if [ -z "$BASH_VERSION" ]; then
    export BASH_VERSION=4
fi
source "${rvm_home}/scripts/rvm"

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接