windowsのirb上でriを使う。
昨日の方法は、One-Click rubyで構築したwindosの環境では動きませんでした。``*1で呼ばれる「exec」がうまく動いてくれないみたいです。
以下のエラーが出力されてしまいます。
Errno::ENOEXEC: Exec format error - ri from (irb):1in ``' from (irb):1
出力されたエラーを元に探してみたところ、windowsでは「hoge.rb」を呼びたい場合には、
「exec "hoge.rb"」ではなく、「exec "ruby hoge.rb"」としなければならないことがわかりました。どうやら呼びたいものを直接指定しなければならないようです。でも、変です。コマンドプロンプトでは「refe」だけで呼ぶことができるんです。何か仕掛けがあるに違いありません。
あれこれ探してみると、「ri.bat」というファイルがありました。もしかしたら、これがコマンドプロンプトとriをつなげてくれているのかもしれません。
refe.batを探してみます。 − 「refe.bat」はありませんでしたが「refe.cmd」というファイルを発見しました。おそらく、コマンドプロンプト上で「refe」と入力したとき、このファイルが呼ばれているのだと思います。実験してみます。
`ri.bat ` #irb上で入力 #=>適切な処理が帰ってくる puts `refe.cmd IO.to_i` #=>適切な処理が帰ってくる。
おおー動きました。(・▽・)!
というわけで、windows版
module Kernel def f(name, arg) puts `#{name} #{arg}` end def r(arg); f("refe.cmd", arg); end def ri(arg); f("ri.bat", arg); end private :r, :ri, :f end class Module def f(name, meth) if meth if instance_methods(false).include? meth.to_s puts `#{name} #{self}##{meth}` else super end else puts `#{name} #{self}` end end def r(arg=nil); f("refe.cmd", arg); end def ri(arg=nil); f("ri.bat", arg); end end