2009-11-11 5 views
11

Ich habe mehrere Lua-Skripte, die Erfahrungen ausführen und viele Informationen ausgeben, in Textdateien und in der Konsole. Ich möchte einige Farben in der Konsolenausgabe hinzufügen, um sie lesbarer zu machen.Bash-Ausgabefarbe mit Lua-Skript aktivieren

Ich weiß, dass es möglich ist, die Ausgabe von Bash-Skripts mit den ANSI-Escape-Sequenzen zu färben. Zum Beispiel:

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

Ich habe versucht, das gleiche in Lua zu tun:

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

, aber es funktioniert nicht. Ich habe auch versucht mit print() anstelle von io.write(), aber das Ergebnis ist das gleiche.

+1

\ e ist das Escapezeichen, ASCII 0x1b. – derobert

+0

Danke, das wusste ich nicht! – Wookai

Antwort

13

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

Beachten Sie die \ 27. Immer wenn Lua eine \ gefolgt von einer Dezimalzahl sieht, wandelt es diese Dezimalzahl in seine ASCII-Entsprechung um. Ich benutzte \ 27, um das Bash \ 033 ESC-Zeichen zu erhalten. Weitere Informationen here.

+0

Großartig, das funktioniert;)! Danke vielmals ! – Wookai

2

Es kann sicherlich in Lua getan werden; Der Trick ist nur, die Escape-Sequenz richtig zu machen. Sie können string.char verwenden, um einen bestimmten ASCII-Wert zu schreiben:

 
$ 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

Danke für die Details, es ist interessant zu sehen, wie das funktioniert. Antwort von jkndrkn, obwohl praktischer;)! – Wookai