2014-06-23 157 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