繁体   English   中英

ruby(rubyinstaller)和cygwin的奇怪行为与循环内的gets方法

[英]ruby (rubyinstaller) and cygwin odd behaviour with gets method inside a loop

到目前为止,我已经在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 gets方法有关。

我希望有人可以帮我调试一下这里到底发生了什么。

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

我用以下方法修复了它:

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

我不知道我是否必须在cygwin终端上使用“ win32console” gem,即使在II不输出颜色的情况下,到目前为止,我一直在只使用带有“ colorize” gem的togheter来使颜色起作用。 Windows XP本机命令提示符。

我会在代码顶部对此进行提醒...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM