2014-06-23 151 views
0

我想让RVM和ruby安装在Ubuntu 12虚拟机中,除了密码提示之外,没有人为干预。自动RVM安装

我创建了一个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. 

我是cl ueless。为什么我不能使用/usr/local/rvm/bin/rvm

有没有一种方法可以通过脚本为该用户执行source /etc/profile.d/rvm.sh

我不太擅长shell脚本和Linux,所以我很欣赏你可以给的任何参考和例子。

谢谢!

UPDATE

我也试过:

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

...和所有它的变种。同样的错误:“RVM不是功能”。

+0

您是否尝试在脚本中执行类似'source〜/ .rvm/scripts/rvm'的操作? – shivam

回答

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工作了!

1

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

引用你,“有没有办法从脚本执行此用户的source /etc/profile.d/rvm.sh?”

你试过吗?我有一个类似的安装,一旦从crontab无法正常工作(他们在该网站上有指示,但我们无法让它们工作),我必须做的几乎完全是这样 - 源代码部分rvm的profile.d。

+0

大家好!谢谢。是的,我尝试从脚本执行。例如,对于这个用户,$ PATH不会改变,所以我做'PATH =“$ {PATH}:$ {rvm}”'来完成这个任务。但我想先让dvm在脚本中工作。从脚本执行它会产生相同的错误“RVM不是函数”。这对我来说没有意义,这就是为什么我在这里问,我必须失去一些东西。我不知道RVM不是可执行文件,谢谢你。 – Apollo

+0

它实际上是一种时髦的混合可执行文件/ shell函数,取决于它需要做什么。一些更多信息在这里:https://rvm.io/workflow/scripting –

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

上述错误时,RVM未运行时,产生的,因此你的终端不能识别它,因为它试图运行它作为一个系统命令。

你可能想尝试这种通过你的shell脚本调用RVM方法之前运行RVM:

source ~/.rvm/scripts/rvm 
+0

感谢您的提示,但它不会工作,正如我所说,这是一个多用户安装,而不是单用户。此外,据我了解,这条线'。 “/ usr/local/rvm/bin/rvm”与“source”/ usr/local/rvm/bin/rvm“'完全相同。 – Apollo

+0

我想你是对的。抱歉没有给予多用户安装太多的关注 – shivam