【问题标题】:Automatic RVM installation自动 RVM 安装
【发布时间】:2014-06-23 17:33:48
【问题描述】:

我正在尝试在 Ubuntu 12 虚拟机中安装 RVM 和 ruby​​,除了密码提示之外,无需人工交互。

我创建了一个 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 不是函数”。

【问题讨论】:

  • 您是否尝试在脚本中执行类似source ~/.rvm/scripts/rvm 的操作?

标签: ruby linux shell rvm


【解决方案1】:

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

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

你试过这样做吗?我曾经有一个类似的安装,它不能从 crontab 正常工作(他们在网站上有关于该场景的说明,但我们无法让它们工作),我必须几乎完全这样做 - 源部分rvm 的 profile.d。

【讨论】:

  • 大家好!谢谢。是的,我尝试从脚本执行。例如,对于这个用户,$PATH 不会改变,所以我使用PATH="${PATH}:${rvm}" 来完成它。但我试图让 dvm 首先在脚本中工作。从脚本执行它会呈现相同的错误“RVM 不是函数”。这对我来说没有意义,这就是我在这里问的原因,我一定错过了一些东西。我不知道 RVM 不是可执行文件,谢谢。
  • 它实际上是一种时髦的混合可执行/shell 函数,这取决于它需要做什么。更多信息:rvm.io/workflow/scripting
【解决方案2】:
RVM is not a function, selecting rubies with 'rvm use ...' will not work.

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

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

source ~/.rvm/scripts/rvm

【讨论】:

  • 感谢您的提示,但它不起作用,正如我所说,这是一个多用户安装,而不是单用户安装。另外,据我了解,. "/usr/local/rvm/bin/rvm" 行与source "/usr/local/rvm/bin/rvm" 完全相同。
  • 我猜你是对的。抱歉没有太关注多用户安装
【解决方案3】:

我发现了导致问题的原因。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多