Windows'选择'命令搞乱了Ruby'获取'方法

itd*_*ork 6 ruby windows batch-file

打开irb并且

  1. 类型gets.它应该工作正常.
  2. 然后尝试system("choice /c YN")它应该按预期工作.
  3. 现在再试gets一次,它表现得很奇怪.

谁能告诉我为什么会这样?

编辑:有关"奇怪"行为的一些说明,它允许我键入gets,但不显示字符,我必须按两次回车键.

kir*_*hik 1

终端输入输出处理是黑暗而神秘的艺术。任何试图bash在 Windows 中进行彩色输出的人PowerShellssh知道这一点。(像 Ctrl+Backspace 这样的各种快捷键习惯只会让事情变得更糟。)

\n\n

出现问题的可能原因之一是特殊字符处理。每个终端都可以以多种不同的模式键入字符,并且它会解析自己的输出以搜索某些字符序列以切换状态。

\n\n

这里有铁我们可以找到 ANSI 转义码序列,这是不同类型终端之间可能支持的标准之一。

\n\n

看那边Esc[5;45m?这将使所有以下输出在洋红色背景上闪烁。类似的东西还有很多。

\n\n

所以,从字面上看你的问题的答案是 \xe2\x80\x94 你的choice命令使用特殊的转义序列将输出模式搞乱了,而 ruby​​\'s 在终端操作的那种奇怪的特殊模式中得到了中断。

\n\n

但更有用的是HighLine gem 文档的链接。当可以用大约 12 个 LOC来实现相同的行为时,为什么人们可能想要实现特定于平台的强制行为呢?对要点的所有尊重都归功于botimer,我只是通过搜索偶然发现了他的代码。

\n