代码之家  ›  专栏  ›  技术社区  ›  Wookai

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

  •  11
  • Wookai  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  13
  •   jkndrkn    16 年前

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

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

        2
  •  2
  •   Mark Rushakoff    16 年前

    它当然可以在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