[英]Ruby: irb doesn't work on Windows
我已經使用Ruby 1.9.3-p194一鍵安裝程序在Windows 7 PC中安裝了Ruby 1.93。 我可以使用ruby
命令來解釋文件,但是當我輸入irb
,會出現以下錯誤:
C:\Users\Acer>irb
F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2111:in `expand_path': non-absolute home
(ArgumentError)
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2111:in `_rl_read_init_file'
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2094:in `rl_read_init_file'
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:2515:in `readline_initialize
_everything'
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:3746:in `rl_initialize'
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/rbreadline.rb:4758:in `readline'
from F:/Programs/Ruby193/lib/ruby/site_ruby/1.9.1/readline.rb:40:in `readline'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/input-method.rb:115:in `gets'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:139:in `block (2 levels) in eval_input'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:273:in `signal_status'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:138:in `block in eval_input'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `call'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:188:in `buf_input'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:103:in `getc'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/slex.rb:205:in `match_io'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/slex.rb:75:in `match'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:286:in `token'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:262:in `lex'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:233:in `block (2 levels) in each_top
_level_statement'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `loop'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:229:in `block in each_top_level_stat
ement'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `catch'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb/ruby-lex.rb:228:in `each_top_level_statement'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:155:in `eval_input'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:70:in `block in start'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:69:in `catch'
from F:/Programs/Ruby193/lib/ruby/1.9.1/irb.rb:69:in `start'
from F:/Programs/Ruby193/bin/irb:12:in `<main>'
我在F:/Programs/Ruby193
文件夾中安裝了Ruby,並在PATH
添加了F:/Programs/Ruby193/bin
。 我也嘗試使用Ruby 1.87,但出現了相同的錯誤。
我從Pete的評論中得到了解決方案。 我在計算機上安裝了Cygwin
,這引起了問題(不確定原因)。 我剛剛在命令行中輸入了此命令: set HOME=
並且irb
開始工作!
您也可以看到此鏈接 。
如果您在與小提琴相關的Ruby 1.9.3中啟動IRB遇到問題,可以執行以下操作:
在rubyxxx\\lib\\ruby\\site_ruby\\xxx\\rbreadline.rb
替換:
這個:
require 'fiddle'
class Win32API
DLL = {}
TYPEMAP = {"0" => Fiddle::TYPE_VOID, "S" => Fiddle::TYPE_VOIDP, "I" => Fiddle::TYPE_LONG}
CALL_TYPE_TO_ABI = {:stdcall => 1, :cdecl => 1, nil => 1} #Taken from Fiddle::Importer
def initialize(dllname, func, import, export = "0", calltype = :stdcall)
@proto = import.join.tr("VPpNnLlIi", "0SSI").chomp('0').split('')
handle = DLL[dllname] ||= Fiddle.dlopen(dllname)
@func = Fiddle::Function.new(handle[func], TYPEMAP.values_at(*@proto), CALL_TYPE_TO_ABI[calltype])
end
def call(*args)
args.each_with_index do |x, i|
args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if @proto[i] == "S"
args[i], = [x].pack("I").unpack("i") if @proto[i] == "I"
end
@func.call(*args).to_i || 0
end
帶有:
require 'dl'
class Win32API
DLL = {}
TYPEMAP = {"0" => DL::TYPE_VOID, "S" => DL::TYPE_VOIDP, "I" => DL::TYPE_LONG}
def initialize(dllname, func, import, export = "0", calltype = :stdcall)
@proto = [import].join.tr("VPpNnLlIi", "0SSI").sub(/^(.)0*$/, '\1')
handle = DLL[dllname] ||= DL.dlopen(dllname)
@func = DL::CFunc.new(handle[func], TYPEMAP[export.tr("VPpNnLlIi", "0SSI")], func, calltype)
end
def call(*args)
import = @proto.split("")
args.each_with_index do |x, i|
args[i], = [x == 0 ? nil : x].pack("p").unpack("l!*") if import[i] == "S"
args[i], = [x].pack("I").unpack("i") if import[i] == "I"
end
ret, = @func.call(args)
return ret || 0
end
我建議使用DevKit 。 我有64位Windows 7和ruby 1.9.3-p125,並且所有東西都可以在DevKit中正常運行。
d:\>systeminfo | findstr /B /C:"OS Name"
OS Name: Microsoft Windows 7 Enterprise
d:\>ruby -v
ruby 1.9.3p125 (2012-02-16) [i386-mingw32]
d:\>irb
irb(main):001:0> 2+2
=> 4
irb(main):002:0> exit
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.