Включить цвет вывода bash с помощью Lua-скрипта
у меня есть несколько сценариев Lua, которые запускают опыт и выводят много информации, в текстовых файлах и в консоли. Я хотел бы добавить некоторые цвета в вывод консоли, чтобы сделать его более читаемым.
Я знаю, что можно раскрасить выходные данные скриптов bash, используя escape-последовательности ANSI. Например :
$ echo -e "This is red->e[00;31mREDe[00m"
Я попытался сделать то же самое в Lua :
$ lua -e "io.write('This is red->e[00;31mREDe[00mn')"
но это не работает. Я также пробовал с print()
вместо io.write()
, но результат тот же.
2 ответов
lua -e "print('This is red->[31mred\n')"
обратите внимание на \27. Когда Луа видит \
с последующим десятичным числом он преобразует это десятичное число в его эквивалент ASCII. Я использовал \27 для получения символа bash \033 ESC. Подробнее здесь.
это, безусловно, можно сделать в Lua; трюк просто получить escape-последовательность правильно. Вы можете использовать string.char
чтобы записать определенное значение ASCII:
$ echo -e '\E[37;44m'"3[1mHello3[0m" # white on blue Hello $ echo -e '\E[37;44m'"3[1mHello3[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