我试图将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不是一个函数”。
答案 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再次运作!