在Ruby中使用bash ANSI颜色转义字符

时间:2014-12-18 04:09:10

标签: ruby regex bash ansi-escape

我正在使用以下字符串:

\e[48;5;15mText\e[0m

当我使用bash shell打印字符串时,我得到带背景和前景颜色的文本。我想在Ruby中操纵这个字符串(包括转义序列中的单个字符)。当我将这个字符串从命令行传递给Ruby或者直接在我的Ruby脚本中使用它时,转义字符"消失了。"

Ruby脚本

puts("\e[48;5;15mText\e[0m".chars.to_a)

预期输出(点代表空格)

 \
 e
 [
 4
 8
 ;
 5
 ;
 1
 5
 m
 T
 e
 x
 t
 \
 e
 [
 0
 m

当前输出(点代表空格)

 .
 .
 .
 .
 .
 .
 .
 .
 .
 .
 .
 T
 e
 x
 t
 .
 .
 .
 .
 .

因为我在Ruby脚本中使用字符串而我的目标是操纵字符串(包括转义字符),我觉得我应该能够在字符串上运行escaped_string.chars.to_a并得到输出该字符串中的单个字符。我已经能够在bash和python脚本中执行此操作而没有任何问题。

问题
1.为什么我看不到这些逃脱字符?
2.我需要进行哪些设置才能打开"请参阅"这些转义字符?

2 个答案:

答案 0 :(得分:1)

您没有看到转义字符,因为终端仿真器拦截它们以更改颜色和内容而不会打印它们。这是转义字符的重点。几乎总是没有“设置”可以让终端仿真器打印它们,但这显然取决于你正在使用的特定仿真器。

查看角色的一种方法是改为:

"\e[48;5;15mText\e[0m".chars.each {|char| p char }

答案 1 :(得分:0)

它们不仅仅是转义字符,它们是字符序列 试试这个:

puts("\e[48;5;15m")
puts("Text".chars.to_a)
puts("\e[0m")

您现有的代码有效地打印了这个:

puts("\e\n[\n4\n8\n;\n5\n;\n1\n5\nm\nT\ne\nx\nt\n\e\n[\n0\nm")

因此,转义符号序列被破坏。