2009-11-11 3 views
11

У меня есть несколько сценариев Lua, которые запускают опыт и выводят много информации, в текстовые файлы и в консоль. Я хотел бы добавить некоторые цвета в вывод консоли, чтобы сделать его более читаемым.Включить цвет выхода bash с помощью сценария Lua

Я знаю, что можно выделять выходные данные bash-скриптов, используя escape-последовательности ANSI. Например:

$ 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

+0

Спасибо, я этого не знал! – Wookai

ответ

13

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

Обратите внимание на \ 27. Всякий раз, когда Lua видит \, за которым следует десятичное число, он преобразует это десятичное число в его эквивалент ASCII. Я использовал \ 27 для получения символа bash \ 033 ESC. Больше информации here.

+0

Отлично, это работает;)! Большое спасибо ! – Wookai

2

Это может быть сделано в Lua; трюк - это просто получение escape-последовательности. Вы можете использовать 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