使用 RVM 撰寫腳本
由於 RVM 的撰寫方式,rvm 不僅適用於命令列,也適用於撰寫腳本。撰寫依賴使用 rvm 命令列介面來切換 Ruby 和 / 或 gemset 的腳本時,您需要記住與一般使用方式有一個重要的區別。
請閱讀並了解以下的二進制模式與函式模式。
二進制模式與函式模式
RVM 可以以兩種不同的模式執行 - 預設情況下,如果 rvm 二進制檔在您的路徑中可用 / 與絕對路徑一起使用,RVM 將以二進制檔執行。這表示 rvm 可以執行絕大多數的操作(例如安裝 Ruby、呼叫設定操作),但某些事情(例如切換目前的 Ruby)會失敗,因為它無法變更它運作的環境。
當 RVM 以 shell 函式使用(透過 sourcing scripts/rvm 檔案,無論是在您的 shell 設定檔中,或是在撰寫腳本時直接在您的腳本中,它就能夠控制它執行的環境 - 也就是說,rvm use 和 rvm gemset use 會如預期般運作,切換 GEM_HOME、PATH 和其他用於一般操作的環境變數。
撰寫腳本
由於您可以使用兩種模式執行 RVM,因此您的第一個選項是作為二進制檔執行,使用 rvm do 在指定的環境中執行一次性指令。
例如,在任何環境中建立 gemset
rvm 1.8.7-p334 do rvm gemset create my_gemset
第二個選項(可能是你需要的)是加入一個 sourcing 行,與你放入互動式登入 shell 檔案中的相同。
例如,對於使用者安裝的 RVM
\# Load RVM into a shell session *as a function* if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then \# First try to load from a user install source "$HOME/.rvm/scripts/rvm" elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then \# Then try to load from a root install source "/usr/local/rvm/scripts/rvm" else printf "ERROR: An RVM installation was not found.\n" fi
上述程式碼出現在 bash 或 zsh 程式碼後,你就能使用正常的 rvm 指令,影響程式碼中其餘部分的環境。
如果你想查看 rvm 是否正確載入為 shell 函式,而不是二進位檔,你可以將下列行插入你的程式碼中。
type rvm | head -1
如果上述行輸出「rvm 是函式」,則一切正常。如果輸出「rvm 已雜湊」或「rvm 是 $rvm_path/bin/rvm」,甚至「找不到」,則表示它在程式碼中以二進位檔執行,或根本沒有執行,而且無法如預期控制程式碼的環境。
如果你正在撰寫程式碼,而且遇到程式碼中 ruby 沒有「正確切換」的情況,則表示 rvm () 函式未載入 shell,而是二進位檔。
更多資源
如需更多資訊,請參閱 此 gist