Ruby 从我的Ubuntu.profile中寻找rvm只能手动工作,不能登录

Ruby 从我的Ubuntu.profile中寻找rvm只能手动工作,不能登录,ruby,ubuntu,rvm,.profile,Ruby,Ubuntu,Rvm,.profile,我在从我的Ubuntu 10.04.profile获取Ruby版本管理器rvm时遇到了问题。守则: [[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm" …从不做我期望的事情(即,当我打开一个新shell或开始一个新会话时,给我rvm程序);但如果我执行 source .profile 在登录后的新shell中,它可以工作!为什么在我手动获取资源时它会工作,但在登录时不会自动启动?RVM安装页面有一系列内

我在从我的Ubuntu 10.04.profile获取Ruby版本管理器rvm时遇到了问题。守则:

[[ -s "$HOME/.rvm/scripts/rvm" ] && . "$HOME/.rvm/scripts/rvm"
…从不做我期望的事情(即,当我打开一个新shell或开始一个新会话时,给我rvm程序);但如果我执行

source .profile

在登录后的新shell中,它可以工作!为什么在我手动获取资源时它会工作,但在登录时不会自动启动?

RVM安装页面有一系列内容需要检查,以测试RVM的初始化。阅读本手册末尾的“安装疑难解答”部分


另外,这里有一个可以帮助解决这类问题的描述。

看起来Ubuntu处理登录脚本的方式与大多数其他linux发行版不同


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

寻源$HOME/.RVM假设您安装了RVM的单个用户,特别是主目录为$HOME的用户。很可能,在您的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

我在Atom编辑器中遇到了一个问题,它没有选择RVM环境,因此在Ubuntu 16.04上找不到
rubocp
命令。但当我从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"

你用的是哪个外壳?您是否也有.bash_配置文件?可能重复(或至少相同)问题:您如何登录?我正在使用gdm3,并试图从~/.xprofile获取rvm,但~/.xprofile由/bin/sh运行,不支持该操作;在我的例子中(hack),我修改了/etc/gdm3/Xsession以使用
#/bin/bash
。根据您登录的方式,检查是否确实使用了.profile(例如,
profile\u used=1;export profile\u used
)。如果是,它可能由错误的shell运行(它实际上只是由/bin/sh“或更好的shell”运行);如果不是,请尝试.xprofile。你也漏掉了一个字母,但这可能是打字错误。