1

我一直在 windows xp 下的 cygwin 终端中运行相当多的 ruby​​ 控制台脚本,到目前为止使用 ruby​​installer 的 ruby​​ 1.9.3-p28 没有问题。

突然间,我注意到了这种奇怪的行为。我有以下简单的代码:

while input = gets
  puts input
  puts "ok"
end

这在控制台中没有任何输出。似乎该input = gets部分由于某种原因使 while 循环挂起。如果我以这种方式更改脚本

while true
  puts "ok"
end

虽然循环input = gets按预期工作,但如果我在它下面添加行puts "ok"再次挂起,奇怪的是它甚至没有在挂起之前将“ok”写入控制台。似乎它完全没有做任何事情,Windows 任务管理器显示 ruby​​ 进程根本没有活动。

我也尝试过loop do end循环,但行为完全相同。

相反,如果我根本不使用循环,一切都会正常。

我所能理解的是,它与循环内的 stdin 获取方法有关。

我想是否有人可以帮助我调试这里到底发生了什么。

更新(更多信息):脚本在 Windows 命令外壳中正确工作。

4

1 回答 1

1

我修复了它:

require 'win32console' if RbConfig::CONFIG['host_os'].include? "mingw32"

我不知道我必须将“win32console”gem 与 cygwin 终端一起使用,即使在 II 没有输出颜色的情况下,到目前为止我一直在使用“win32console”和“colorize”gem 来使颜色起作用windows xp 本机命令提示符。

我会在我的代码顶部提醒这一点......

于 2013-04-16T18:41:09.067 回答