自动RVM安装

时间:2014-06-23 17:33:48

标签: ruby linux shell rvm

我试图将RVM和ruby安装在Ubuntu 12虚拟机中,除了密码提示外没有人工交互。

我创建了一个shell脚本,这样做非常好,直到我需要使用RVM本身。

我正在使用多用户安装。

#!/bin/bash -l
mainUser=`whoami`
echo "Installing as '${mainUser}'"
echo "Installing git..."
sudo -S apt-get install --yes curl git-core
echo "Installing RVM..."
\curl -L https://get.rvm.io | sudo bash -s stable
echo "Adding ${mainuser} to RVM group..."
sudo adduser $mainUser rvm
newgrp rvm

从这里开始变得奇怪..我需要加载dvm作为源码。我希望我的脚本都有这个源和我的用户的bash_profile / bashrc。无论如何..我知道如何手动完成它,但我不能从脚本中完成此操作。这是我尝试的最后一个代码:

. "/usr/local/rvm/bin/rvm"
rvm use ruby-head
rubyVersion=`rvm list | awk '/ruby-head/{print x;print};{x=$0}' | sed -n '/ruby-head/{g;1!p;};h' | awk -F ' ' '{print $1}'`
rubyTest=${rubyVersion}@test
rvm use $rubyTest --create --default

我得到的错误是:

test.sh: 7: /usr/local/rvm/bin/rvm: Syntax error: "(" unexpected (expecting "fi")

如果我只是尝试使用完整路径,就像这样:

rvm=/usr/local/rvm/bin/rvm
$rvm use ruby-head
rubyVersion=`$rvm list | awk '/ruby-head/{print x;print};{x=$0}' | sed -n '/ruby-head/{g;1!p;};h' | awk -F ' ' '{print $1}'`
rubyTest =${rubyVersion}@test
$rvm use $rubyTest --create --default

我得到了这个错误:

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

我很无能为力。为什么我不能使用/usr/local/rvm/bin/rvm

有没有办法从脚本中为此用户执行source /etc/profile.d/rvm.sh

我不太擅长shell脚本和Linux,所以我感谢您提供的任何参考和示例。

谢谢!

更新

我也尝试过:

source "/usr/local/rvm/scripts/rvm"

......以及它的所有变种。同样的错误:“RVM不是一个函数”。

3 个答案:

答案 0 :(得分:1)

rvm实际上是作为shell函数而不是可执行文件实现的,这就是为什么你不能只调用/ usr / local / rvm / bin / rvm本身。

引用你的话,“有没有办法从脚本中为这个用户执行源/etc/profile.d/rvm.sh?”

你尝试过这样做吗?我有一个类似的安装,一旦它从crontab无法正常工作(他们在网站上有关于该场景的说明,但我们无法使它们工作),我几乎必须做到这一点 - 来源部分rdm的profile.d。

答案 1 :(得分:0)

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

当rvm未运行时会生成以上错误,因此您的终端无法识别它,因为它尝试将其作为系统命令运行。

在调用rvm方法之前,您可能想尝试通过shell脚本运行rvm:

source ~/.rvm/scripts/rvm

答案 2 :(得分:0)

我发现了造成这个问题的原因。

之前我意识到我会在脚本文件中出现条件错误,所以我遇到了这个页面:

https://superuser.com/questions/552016/bash-script-not-found

碰巧,我正在使用以下命令执行脚本:

sh script.sh

这意味着我得到了Dash而不是Bash。

要解决此问题,我将代码更改为:

PATH=$PATH:/usr/local/rvm/bin # Add RVM to PATH for scripting
[[ -s "/usr/local/rvm/scripts/rvm" ]] && . "/usr/local/rvm/scripts/rvm" # Load RVM function

然后我这样执行:

bash script.sh

瞧...... RVM再次运作!