使用Lua脚本启用bash输出颜色。

我有几个 Lua 脚本可以运行经验并输出大量信息,以文本文件和控制台形式。我想在控制台输出中添加一些颜色,使其更易读。

我知道可以使用 ANSI 转义序列对 bash 脚本的输出进行着色。例如:

$ echo -e "This is red->\e[00;31mRED\e[00m"

我尝试在 Lua 中执行相同的操作:

$ lua -e "io.write('This is red->\\e[00;31mRED\\e[00m\n')"

但它不起作用。我还尝试使用 print() 而不是 io.write(),但结果相同。

原文链接 https://stackoverflow.com/questions/1718403

点赞
stackoverflow用户126042
stackoverflow用户126042

这当然可以在Lua中完成;技巧就在于正确设置转义序列。可以使用string.char将特定的ASCII值写出来:

$ echo -e '\E[37;44m'"\033[1mHello\033[0m" #  白字蓝底
Hello
$ echo -e '\E[37;44m'"\033[1mHello\033[0m" | xxd # 查看代码的十六进制转储
0000000: 1b5b 3337 3b34 346d 1b5b 316d 4865 6c6c  .[37;44m.[1mHell
0000010: 6f1b 5b30 6d0a                           o.[0m.
$ lua -e "for _,i in ipairs{0x1b,0x5b,0x33,0x37,0x3b,0x34,0x34,0x6d,\
0x1b,0x5b,0x31,0x48,0x65,0x6c,0x6c,0x6f,0x1b,0x5b,0x30,0x6d,0x0a} \
do io.write(string.char(i)) end"  # 再次在白字蓝底中输出“Hello”
Hello
2009-11-11 22:41:37
stackoverflow用户205640
stackoverflow用户205640
`lua -e "print('This is red->\27[31mred\n')"`

注意到 \27。每当 Lua 看到一个 \ 后面跟着一个十进制数,它就会将这个十进制数转化为它的 ASCII 码。这里我使用 \27 来得到 bash 的 \033 ESC 字符。更多信息请见这里

2009-11-11 22:44:44