我有几个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()
,但结果是一样的。
答案 0 :(得分:13)
lua -e "print('This is red->\27[31mred\n')"
注意\ 27。每当Lua看到一个\
后跟一个十进制数时,它会将这个十进制数转换成它的ASCII等价数。我使用\ 27来获取bash \ 033 ESC字符。更多信息here。
答案 1 :(得分:2)
当然可以在Lua中完成;诀窍就是让逃脱序列正确。您可以使用string.char
写出特定的ASCII值:
$ echo -e '\E[37;44m'"\033[1mHello\033[0m" # white on blue Hello $ echo -e '\E[37;44m'"\033[1mHello\033[0m" | xxd # check out hex dump of codes 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" # prints out "Hello" in white on blue again Hello