2009-11-11 17 views
11

Ho diversi script Lua che eseguono esperienze e generano un sacco di informazioni, nei file di testo e nella console. Mi piacerebbe aggiungere alcuni colori nell'output della console, per renderlo più leggibile.Abilita il colore di output bash con lo script Lua

So che è possibile colorare l'output degli script di bash utilizzando le sequenze di escape ANSI. Per esempio:

$ echo -e "This is red->\e[00;31mRED\e[00m" 

ho cercato di fare lo stesso in Lua:

$ lua -e "io.write('This is red->\\e[00;31mRED\\e[00m\n')" 

ma non funziona. Ho anche provato con print() invece di io.write(), ma il risultato è lo stesso.

+1

\ e è il carattere di escape ASCII 0x1b. – derobert

+0

Grazie, non lo sapevo! – Wookai

risposta

13

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

Annotare la \ 27. Ogni volta che Lua vede un \ seguito da un numero decimale, converte questo numero decimale nel suo equivalente ASCII. Ho usato \ 27 per ottenere il carattere bash \ 033 ESC. Maggiori informazioni here.

+0

Ottimo, funziona!)! Molte grazie ! – Wookai

2

Si può certamente fare a Lua; il trucco è solo ottenere la sequenza di fuga giusta. È possibile utilizzare string.char per scrivere un valore ASCII specifica out:

 
$ 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

Grazie per i dettagli, è interessante vedere come funziona. Accettando però la risposta di jkndrkn, perché più pratico;)! – Wookai