1.9.1(artonさん)と環境変数

取り敢えず Windows (XP SP3) では、artonさんのパッケージ(ActiveScriptRuby and Other packagesより)で Ruby 1.9.1 を試している。1.8系も共存させてる。それで、1.9.1パッケージをインストールすると、「Ruby-1.9 console」が入る、パスとか調整してあって、1.9.1の ruby系コマンドが使える。
さて、artonさんがちゃんとしてくれてるので(L'eclat des jours(2009-02-19)) 1.8系コンソールとの使い分けも十全な筈だ、本当は。しかし、僕は自分で環境変数いじってて、1.8系bin へのパスも Path に付け加えている。その辺で普通に起動したコマンドプロンプトでも ruby が使えるようにと、1.8系スタートメニューから起動したコンソールだけからじゃなく。
というわけで、「Ruby-1.9 console」の Path、先頭に 1.9系のパスがあるのだけど、後ろの方に 1.8系のパスも書いてある。ちょっとやばい、混乱しそうだ、1.9ではまだいれてない ruby系コマンドを 1.8系から呼んでしまいそうだ。何とかしないと。

set Path=%Path:1.8=%

取り敢えず開いた「Ruby-1.9 console」で「set Path=%Path:1.8=%」とかする。Path環境変数のなかの「1.8」がなくなるのでもう 1.8系へのパスは通っていない、大丈夫だ。
setコマンドの拡張環境変数置換は「set /?」参照

環境変数の置換は、次のように拡張されます:

   %PATH:文字列1=文字列2%

は、PATH 環境変数を展開し、その結果に含まれるすべての "文字列1""文字列2" に置き換えます。"文字列2" に空の文字列を指定すると、展開
された出力からすべての "文字列1" を削除することができます。"文字列1"
をアスタリスクで始め、展開された出力の先頭から、文字列1 の残りの部分
が最初に現れるまでのすべてを一致させることもできます。

しかし、毎回こんなコマンドを実行するのは大変だ、絶対忘れる。

setenv19.bat

Ruby-1.9 console」の作動機序はちゃんと調べられないでいるのだけど、取り敢えず C:\Program Files\Ruby-1.9.1\bin\setenv19.bat に手を入れたらなんとかなった。

@echo off
@if not "%~d0" == "~d0" goto WinNT
C:\PROGRA~1\RUBY-1~1.1\bin\ruby -x "C:/PROGRA~1/RUBY-1~1.1//bin/setenv19.bat" %1 %2 %3 %4 %5 %6 %7 %8 %9
@goto endofruby
:WinNT
"%~dp0ruby" -x "%~f0" %*
@goto endofruby
#!C:/PROGRA~1/RUBY-1~1.1//bin/ruby
require 'winpath'
path = Pathname.new(File.dirname($0)).shortname.gsub(File::SEPARATOR, File::ALT_SEPARATOR)
ENV['PATH'] = "#{path};#{ENV['PATH']}"
if ARGV.size > 0
  cmd = 'start ruby -Ks "' + ARGV[0] + '"'
else
  if ENV['OS'] == 'Windows_NT'
    cmd = "start cmd"
  else
    cmd = "start command"
  end
end
system(cmd)
__END__
:endofruby

Rubyスクリプト部分で実際に ENV['PATH'] を触っているところ

ENV['PATH'] = "#{path};#{ENV['PATH'].gsub '1.8', ''}"

これでなんとかなった。文字列'1.8' を消しただけでは変な無効なパス文字列が残るんだけど、まあ許してもらおう。
「"%~dp0ruby" -x "%~f0" %*」この辺の説明は「バッチパラメータ」とか Rubyコマンドラインオプションとか