问题 使用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(),但结果是一样的。


6310
2017-11-11 22:08


起源

\ e是转义字符,ASCII 0x1b。 - derobert
谢谢,我不知道! - Wookai


答案:


lua -e "print('This is red->\27[31mred\n')"

注意\ 27。每当Lua看到一个 \ 后跟一个十进制数,它将此十进制数转换为ASCII等效数。我使用\ 27来获取bash \ 033 ESC字符。更多信息 这里


13
2017-11-11 22:44



太好了,这很有效;)!非常感谢 ! - Wookai


它当然可以在Lua中完成;诀窍就是让逃脱序列正确。您可以使用 string.char 写出特定的ASCII值:

$ echo -e'\ E [37; 44m'“\ 033 [1mHello \ 033 [0m”#white on blue
你好
$ 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“再次以白色显示蓝色
你好

2
2017-11-11 22:41



感谢您的详细信息,看看这是如何工作很有趣。接受jkndrkn的回答虽然更实用;)! - Wookai