2009-11-11 22 views
11

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

我知道可以使用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(),但结果是一样的。

+1

\ e是转义字符,ASCII 0x1b。 – derobert 2009-11-11 22:29:28

+0

谢谢,我不知道! – Wookai 2009-11-11 23:24:31

回答

13

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

注意\ 27。每当Lua看到一个后面跟着一个十进制数的\,它就会将这个十进制数转换成它的ASCII等效值。我用\ 27获得了bash \ 033 ESC字符。更多信息here

+0

太棒了,这个工程;)!非常感谢 ! – Wookai 2009-11-11 23:25:02

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 
+0

感谢您的详细信息,有趣的是看看这项工作。虽然接受jkndrkn的回答,因为更实用;)! – Wookai 2009-11-11 23:26:26