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

13

我有几个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(),但结果是相同的。


1
\e 是转义字符,ASCII 0x1b。 - derobert
2个回答

18

lua -e "print('这是红色->\27[31m红色\n')"

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


2

这在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

谢谢提供详细信息,看到这个工作方式很有趣。不过还是接受jkndrkn的答案,因为更实用 ;) ! - Wookai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接