2009-11-11 98 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