2009-11-11 7 views
11

J'ai plusieurs scripts Lua qui exécutent des expériences et affichent beaucoup d'informations, dans des fichiers texte et dans la console. Je voudrais ajouter quelques couleurs dans la sortie de la console, pour le rendre plus lisible.Activer la couleur de sortie bash avec le script Lua

Je sais qu'il est possible de colorer la sortie des scripts bash en utilisant les séquences d'échappement ANSI. Par exemple:

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

J'ai essayé de faire la même chose dans Lua:

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

mais il ne fonctionne pas. J'ai également essayé avec print() au lieu de io.write(), mais le résultat est le même.

+1

\ e est le caractère d'échappement, ASCII 0x1b. – derobert

+0

Merci, je ne le savais pas! – Wookai

Répondre

13

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

Notez le \ 27. Chaque fois que Lua voit un \ suivi d'un nombre décimal, il convertit ce nombre décimal en son équivalent ASCII. J'ai utilisé \ 27 pour obtenir le caractère bash \ 033 ESC. Plus d'info here.

+0

Super, ça marche;)! Merci beaucoup ! – Wookai

2

Cela peut certainement être fait dans Lua; l'astuce consiste juste à obtenir la séquence d'échappement à droite. Vous pouvez utiliser string.char pour écrire une valeur ASCII spécifique sur:

 
$ 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

Merci pour les détails, c'est intéressant de voir comment cela fonctionne. Accepter la réponse de jkndrkn, parce que plus pratique;)! – Wookai

Questions connexes