2009-11-11 4 views
11

텍스트 파일과 콘솔에서 경험을 실행하고 많은 정보를 출력하는 여러 개의 루아 스크립트가 있습니다. 좀 더 읽기 쉽도록 콘솔 출력에 몇 가지 색상을 추가하고 싶습니다.Lua 스크립트로 bash 출력 색상을 활성화하십시오.

나는 ANSI 이스케이프 시퀀스를 사용하여 bash 스크립트의 출력을 색칠 할 수 있다는 것을 알고있다. 예를 들어 :

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

을했지만 작동하지 않습니다

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

나는 루아에서 동일한 작업을 수행하려고 노력했다. 또한 io.write() 대신 print()으로 시도했지만 결과는 같습니다.

+1

\ e는 이스케이프 문자 인 ASCII 0x1b입니다. – derobert

+0

감사합니다, 나는 그것을 몰랐다! – Wookai

답변

13

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

참고 \ 27. 루아가 \ 다음에 십진수가 오는 것을 볼 때마다이 십진수는 ASCII 등가로 변환됩니다. bash \ 033 ESC 문자를 얻기 위해 \ 27을 사용했습니다. 더 많은 정보 here.

+0

위대한,이 작품;)! 고마워요! – Wookai

2

루아에서 확실히 할 수 있습니다; 그 트릭은 그냥 이스케이프 시퀀스를 올바르게 얻는 것입니다. 당신은 특정 ASCII 값을 작성하는 string.char를 사용할 수 있습니다

 
$ 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

관련 문제