我一直在 windows xp 下的 cygwin 终端中运行相当多的 ruby 控制台脚本,到目前为止使用 rubyinstaller 的 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 命令外壳中正确工作。