Rubyの最新版スナップショットのバージョンが「2.0.0dev」になっています.1.9.3で動作確認したいときも出てきそうなので,複数のバージョンを保持できる,rvmを使うことにしました.
1.9.3と1.8.7を入れましたが,インストール作業にあたり,以下の情報を活用しました.
- rvmをインストールしてRuby1.8.7とRuby1.9.2を共存させられるようになるまで - のどをRubyでいっぱいにして
- cygiwnでrvmを使ってruby-1.9.2をビルド&インストールする - ラシウラ
- cygwinでrvm - akcnvの個人的備忘録 @ ウィキ - アットウィキ
さて…普段はcygwin + zshの環境でコマンドを実行していますが,エラーが出るため,rvmおよびそのもとでのrubyのインストールは,いったんbashに切り替えて行いました.しかし今後,いつもbashでrubyを実行というのは,やってられません.
まずは確認.
$ uname -a CYGWIN_NT-6.1-WOW64 duo 1.7.8(0.236/5/3) 2011-03-01 09:36 i686 Cygwin $ echo $SHELL zsh $ zsh --version zsh 4.3.11 (i686-pc-cygwin) $ [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" /home/takehikom/.rvm/scripts/base:41: rvm_base_except: parameter not set /home/takehikom/.rvm/scripts/rvm:110: command not found: __rvm_setup /home/takehikom/.rvm/scripts/rvm:129: command not found: __rvm_conditionally_add_bin_path /home/takehikom/.rvm/scripts/rvm:154: command not found: __rvm_teardown
エラーの起こっているファイルを見に行きます.~/.rvm/scripts/rvm の41行目は次のとおり.
case " $rvm_base_except " in
この行をいじったりしてみましたが,最終的に元に戻しました.エラーが起こる原因は,このファイルよりもむしろ,~/.zshrcで
setopt no_unset # 未定義変数の使用禁止
としていることでした.検索をかけると,http://www.dna.bio.keio.ac.jp/~yuji/zsh/zshrc.txtをコピーしていたっぽいです.
ということで,
#setopt no_unset # 未定義変数の使用禁止
とすれば解決するのですが,せっかくなので別の方法をとってみます.「setopt no_unset」はそのままとして,~/.zshrcの後方に,以下のように書きます.
# RVM if [ -s ~/.rvm/scripts/rvm ] then if setopt | grep -q nounset then setopt unset source ~/.rvm/scripts/rvm function rvmm() { setopt unset rvm $* setopt no_unset } setopt no_unset else source ~/.rvm/scripts/rvm alias rvmm=rvm fi fi # [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"
「setopt no_unset」をしているときは,rvm関連コマンドを実行するときだけ一時的に「setopt unset」とし,実行を終えてプロンプトを出す前に「setopt no_unset」にします.「setopt no_unset」としていないときは,普通のコマンドです.
なのですが,rvmのコマンド実行時には,「rvm」ではなく「rvmm」を使用することにします.もし「setopt no_unset」の指定をしていて,プロンプトでrvmコマンドを実行すると,
$ rvm list known /home/takehikom/.rvm/scripts/base:41: rvm_base_except: parameter not set (略)
と出るのですぐわかります.*1
rvmmの動作確認をしておきましょう.
$ rvmm use 1.9.3 Using /home/takehikom/.rvm/gems/ruby-1.9.3-p0 $ which ruby irb gem /home/takehikom/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /home/takehikom/.rvm/rubies/ruby-1.9.3-p0/bin/irb gem () { local result command gem "$@" result="$?" hash -r return $result }
gemがfunction化されていますが,これは,~/.rvm/scripts/override_gemに記載があります.~/.rvm/scripts/rvmを読み込んだ際に,上書きするようです.
同日追記:上記設定をして,zshを起動すると,cdコマンド実行時に
__rvm_after_cd:3: rvm_scripts_path: parameter not set
と出ます.~/.rvm/scripts/cdの先頭コメントに従い,「rvm_project_rvmrc=0」を~/.rvmrcに記述すれば回避できます.しかしこの種のトラブルは,もっとありそうです.
*1:「rvm なになに」とやってしまったら,あわてず騒がず,終了するか待つかして,プロンプトになったら,「^m^mm」を実行します.