Ruby Erase in Line在Windows中无法正常工作

时间:2018-04-13 22:29:24

标签: ruby windows

当我在Windows 10命令提示符或Powershell

中运行以下内容时
ruby -e 'puts "Hello world!\e[K\nWhats up?"'

我得到以下内容:

  <!-- this line blank -->
Whats up?

我的期望是:

Hello world!
Whats up?

发生了什么事?我不确定如何调试这个。我已将此隔离到Windows和ruby,因为相同的ruby命令在Linux上按预期工作,并且命令提示符和Powershell上的以下命令也会生成正确的输出:

printf "Hello world!\\e[K\nWhats up?\n"

有些事情:

  • \e[KErase in Line (EL) ANSI字符序列。如果没有参数,则应该清除从光标到结尾的行。
  • Windows 10支持终端序列,由printf命令和this documentation验证。 (在早期版本的Windows中并非如此,这是numerous otherolderStack Overflow posts中的答案。)
  • ruby​​发出的所有其他终端序列似乎都做了Right Thing™;这个似乎是清除整行(无论传递什么参数)。
  • Ruby版本:ruby 2.4.2p198 (2017-09-14 revision 59899) [x64-mingw32]
  • Windows版本:Version 10.0.16299 Build 16299
  • 如果我想编辑任何其他信息,请告诉我。

1 个答案:

答案 0 :(得分:0)

此行为是由a bug in Ruby引起的,该问题已在this commit中修补。