rvm安装不起作用:“ RVM不是功能”


234

我刚刚安装了RVM,但无法使其正常运行。我的.profile文件末尾有这样一行:

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

我尝试运行source .profile并重新启动终端,但是仍然可以在运行时rvm use 1.9.2得到:

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

我的系统是Ubuntu 11.10。


2
我建议您将 rbenv替代RVM。它不需要加载到您的外壳中。
drinor

10
无论哪里有人对某种技术有疑问,总会有一位穿着闪亮盔甲的英雄,他提出了宝贵的建议,以抛弃该技术并安装完全替代的技术,这绝对是另一项无缺点的技术。好像我问了一个红宝石问题,那个英雄立即想出了“只安装java” =)
Clergyman

Answers:


236

您没有使用登录外壳。

此处描述了启用登录标志的过程,还可以在此处找到有关登录shell的一些详细信息。

因此,您需要在Gnome终端的设置中选中“以登录身份运行”选项。设置该标志后,需要打开新的终端。

有时需要将命令设置为/bin/bash --login


对于远程连接,了解运行交互式ssh会话和执行单个命令之间的区别非常重要。

在运行ssh server然后与服务器交互地运行时,默认情况下您使用的是登录shell,但一切都很好,但是由于ssh server "command"您没有使用登录shell,因此需要使用来运行它ssh server 'bash -lc "command"'

任何远程调用都可能与使用执行单个命令具有相同的问题ssh


4
在Mac上等效的解决方案是什么?
亚当·格兰特

8
尝试rvm get stable --auto检查您的终端设置
mpapis 2012年

10
仅供参考:设置好之后,我们必须启动一个新的终端。
oma

2
@mpapis如何在无法将X服务器转发到我的机器的远程服务器上将gnome-terminal设置为“以登录身份运行命令”?
Waseem

12
遵循@mpapis的建议,--auto已被弃用,--auto-dotfiles现在的命令是 rvm get stable --auto-dotfiles
Mart Van de Ven

432

您需要运行以下命令

$ source ~/.rvm/scripts/rvm

然后运行这个

$ type rvm | head -n 1

如果你得到

rvm is a function

问题已经解决了。

您还需要运行user$ rvm requirements以查看操作系统的依赖关系要求

资料来源:https : //rvm.io/rvm/install/

我忘了提到您需要将此代码放入〜/ .bashrc或〜/ .zshrc文件中,而无需再次编写此代码。干杯!


2
谢谢。在ubuntu 10.04上为我工作。
vekozlov 2012年

19
此解决方案仅在当前的Shell会话中有效。如果您遵循此解决方案,则您每次再次登录控制台时都必须重复这些步骤。一个更永久的解决方案是在〜/ .bashrc文件中添加以下内容:if test -f〜/ .rvm / scripts / rvm; 然后[“ $(type -t rvm)” =“函数”] || 来源〜/ .rvm / scripts / rvm fi
Stanley

这确实应该在RVM的gnome集成页面上,更加简洁,并且像在运行KDE和
Cinammon的

1
在完成所有这些操作之后,如果它仍然不是函数呢?
Br.Bill

如果@Stanley的解决方案不起作用,请执行以下操作:stackoverflow.com/questions/820517/bashrc-at-ssh-login
Adam Grant

105

要永久解决此问题,只需剪切/粘贴以下行:

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

来自:~/.bash_profile文件

收件人: ~/.bashrc文件

之所以起作用,是因为.bashrc每次您输入终端和.bash_profile每次登录时都会执行该操作。这就是解决方案/bin/bash --login起作用的原因,但是每次进入终端时都必须这样做。这样,您就可以设置到下一种格式,到那时,您将忘记所有这些:)


作为屏幕用户,我总是需要在这行~/.bashrc而不是 ~/.bash_profile
ryenus

2
谢谢!gnome登录所需的两秒延迟使我感到非常困扰。这将防止该延迟。
justinpage 2014年

6
为什么rvm安装不自动执行此操作?
巴尔基2015年

@mpapis是rvm的发行经理,他说这样做是“可能会使X会话失败(如果我没记错的话,Fedora 17),它会使rsync会话失败……还有我现在不记得的更多原因”。我想我会坚持使用`/ bin / bash --login。
kimbaudi '16

29

我也面临这个问题。最后,我在终端上执行了这一行。

source ~/.rvm/scripts/rvm

问题已解决。因为该行将使RVM实例在特定时间内起作用。


2
最简单的答案。只需将该行放入〜/ .bashrc中,就可以使用任何终端仿真器了。
Nikkolasg 2015年

1
嗨-尽管此命令“固定”了我参加的学期会议的内容,但结果并不粘滞,也无助于新的(或其他)学期会议。而且似乎台式机也不知道这些更改。我也“反对”登录,因为它是基于每个会话/登录的。我个人希望能够将同一程序与不同的Ruby-s和版本进行比较。

1
您才是真正的MVP。直到我尝试了这一步,其他任何方法都没有起作用。我不在乎它是否是临时的,我只需要修复即可。
ian-campbell 2015年

rvm的安装文件在哪里,因此在安装它时,它可以解决此问题和其他问题?我使用了他们主页上描述的过程,并花费了数小时试图使其“正常工作”。应该是“ yum install rvm”之类的东西,一切都准备就绪,可以开始使用了。
JosephK '17

21

最新的RVM(rvm 1.11.6(stable))在Ubuntu(10.10-64位-讨厌的东西或其他东西)上停止工作-我一直

“ RVM不是功能,选择'rvm use ...'的红宝石将不起作用。”

之前,我收到了消息,但是“ rvm 1.9.3-p0@rails321”可以工作。现在,它行不通-您根本无法更改宝石集。

什么都没用,直到我找到了-将此作为最后一行 /home/your-name/.bashrc

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


2
.bash_login [[-s“ $ HOME / .rvm / scripts / rvm”]] &&源“ $ HOME / .rvm / scripts / rvm”中添加了“ rvm get stable --auto”,并将其从.bashrc中删除-我在.bashrc的末尾和任何更改中间流的宝石集的脚本的开始处添加了〜/ .bash_login源代码
Rod McLaughlin

9

如您所说,显示的错误可能是以下错误。

RVM is not a function, selecting rubies with 'rvm use ...' will not work.

You need to change your terminal emulator preferences to allow login shell.
Sometimes it is required to use `/bin/bash --login` as the command. 
Please visit https://rvm.io/integration/gnome-terminal/ for a example.

如上所述,只需在终端中键入“ / bin / bash --login ”(重新启动终端后),然后键入命令和“ rvm use 1.9.3”(例如),它将开始使用相同版本。

只需执行命令“ ruby​​ -v”以确认RVM使用的是Ruby的更新版本。


8

我在全新的rvm安装上也遇到了这个问题,这里没有答案解决了它。进入rvm官方站点的“基础”部分,他们具有以下命令:

#来自http://rvm.io/rvm/basics

源$(rvm 1.9.3 do rvm env --path)

您应该将1.9.3更改为您真正想要的ruby版本,并且它将使rvm成为函数,而不管外壳类型如何。


7

即使您接受了答案,我还是建议您在打开任何外壳之前先加载..〜/ .bashrc。在那末添加该行,您不需要任何登录外壳程序


“登录外壳程序”之所以存在是有原因的,我已经用RVM来源进行了许多测试,并且这是保证工作不会出现无法检测且难以解决的错误的唯一方法
mpapis 2012年

@mpapis您能解释原因吗?从其他答案看,最适合将行移至rc文件
balki 2015年

例如,它可能会使X会话失败(如果我没
记错的

7

也许您可以尝试以下方法:

  • 您的终端->
  • 编辑->
  • 个人资料偏好设置->
  • 标题和命令->
  • 检查“作为登录shell运行命令”
  • 完成了

这是最简单的解决方案,也是正确的解决方案,因为普通的shell会跳过.profile,因此使用此选项将导致它加载并且根本不需要编辑.bashrc。
DWils 2014年


4

打开终端,然后转到“ 编辑”>“配置文件首选项”,然后转到“ 标题和命令 ” 选项卡,然后选中“ 以登录Shell身份运行命令 ”。

启动Bash之后,现在您可以直接在终端上安装Gems,而无需使用sudo,并且错误消息“ RVM不是功能,选择'rvm use ...'的红宝石将不起作用。 ”将被消除。

干杯。


4

以上所有答案均有效。但是,当我遇到相同的问题时,解决方案如下:

  • 更新ZSH。(由于某些原因,尝试直接更新无法正常工作。因此,请从此处卸载并重新安装更新的版本)
  • 使用以下命令将默认shell设置为zsh(即,如果您喜欢zsh)sudo chsh -s $(which zsh) $USER
  • .zshrc可能使用官方RVM站点的 CURL安装了最新的RVM之后,请确保以下代码位于您的底部

    [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
    source ~/.profile
  • 最重要的要点:确保在.zshrc文件的每个导出后PATH都附加:$PATH。即使执行了上述步骤,我仍然认为这是我问题的根源。

  • 发布我的RVM的所有问题并非功能消失。如果仍然无法正常工作,请在此处进行一些错误跟踪。经过数小时的努力来解决此问题,我确定我一定已经看到所有相关的错误。

希望能帮助到你。干杯!


是的先生。那对我有用。不了解最重要的要点,但是,它起作用了。
Ricbermo 2014年

尝试安装RVM时,如果显示,则会发出警告export PATH="/usr/bin:"。它将要求您追加$PATH。这是我的问题之一。因此,每个变量都export PATH应该$PATH追加,以便在导出之前,无论PATH变量已追加了什么。无论如何,很好,这很有帮助。
Vishnu Narang 2014年

3

在Mac OSX 10.8 Mountain Lion上安装Ruby 1.9.3-p125的过程

  1. 您已经安装了最新的XCode(> = 4.3)和命令行Objective-C编译器“ clang”。
  2. 您必须运行“ bash” shell才能执行此过程。
  3. 转到系统偏好设置
  4. 点击“用户和组”
  5. 单击面板左下方的锁,然后输入密码进行解锁。
  6. 在面板左窗格中的用户图标上,按“ Ctrl-Click”,然后选择“高级选项...”
  7. 将登录Shell更改为“ / bin / bash”
  8. 关闭首选项
  9. 打开一个终端窗口(按Command +空格键并输入“ terminal”)
  10. 请按照以下说明进行操作:

http://www.frederico-araujo.com/2011/07/30/installing-rails-on-os-x-lion-with-homebrew-rvm-and-mysql/

笔记:

  • 要安装ruby,您可能需要指定clang编译器:

    $ rvm install 1.9.3p125 --with-gcc = clang

  • 如果RVM找不到/ usr / local / rvm,则需要创建一个链接:

    $ ln -s /用户/ [您的用户名] /。rvm / usr / local / rvm


我认为他们现在达到P194。如果您执行rvm install 1.9.3 --with-gcc = clang,则会自动获得最新版本的1.9.3。
乔治·坎贝尔


1

我会遇到相同的错误,因为我曾经使用apt-get命令安装了旧的rvm版本ruby-rvm。

我通过删除脚本行来解决该问题,以在.bashrc文件中配置旧的rvm。

检查旧的rvm配置脚本,然后运行源.profile



1

我通过将以下行添加到.bash_profile来修复它:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*



0

对于那些遇到同样问题并且像我一样使用lubuntu的人,我关注了此链接

您以以下方式启动终端

lxterminal -e“ bash -il”

感谢@mpapsis,他为我指出了正确的方向


由于链接有时是暂时的,因此为子孙后代在您的答案中粘贴一个简短的摘要可能是个好主意。
马塞尔·威尔逊

0

我更改红宝石版本的不洁方法是

rvm alias create default ruby-2.2.3 && source ~/.bashrc && rvm list

之所以有效,是因为我的〜/ .bashrc中有波纹管,但是奇怪的是它不能自动完成工作。

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

我试图用--login连接到我的docker容器

docker run -it imagename `/bin/bash --login`

但是在这种情况下,容器在后台保持打开状态,因此我无法输入命令。

我尝试了zhc和terminal,都选择了“ open with /bin/bash --login

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.