답변:
실제로 문자열은 \033[
전체가 아닙니다.
그 오프닝 브라켓 뒤에는 일련의 숫자와 기호가옵니다. 이 문자열은 이스케이프 시퀀스라고하며 콘솔의 커서 및 텍스트 색상을 제어하는 데 사용됩니다.
비 인쇄 이스케이프 시퀀스는
\[\033[ and \]
이스케이프 시퀀스가 텍스트 색상을 제어하는 경우 뒤에 m
. 가옵니다 .
색상 순서에 대한 표는 다음과 같습니다.
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
따라서 콘솔 프롬프트를 파란색으로 표시하려면 잊어 버린 파일 이름으로 다음 이스케이프 시퀀스를 사용하십시오.
\[\033[34m\]
(알림 m
)
그러나이 이스케이프 시퀀스는 색상 만 제어하지 않습니다. 커서 이동을 제어 할 수도 있습니다. 다음은 이동 코드 및 작동 방식이 포함 된 테이블 / 목록입니다.
커서 위치 :
\033[<L>;<C>H
또는
\033[<L>;<C>f
커서를 줄 L과 열 C에 놓습니다.
커서를 N 줄 위로 이동하십시오.
\033[<N>A
커서를 N 줄 아래로 이동하십시오.
\033[<N>B
커서를 N 열 앞으로 이동하십시오.
\033[<N>C
커서를 N 열 뒤로 이동하십시오.
\033[<N>D
화면을 지우고 (0,0)으로 이동하십시오.
\033[2J
줄 끝까지 지우기 :
\033[K
커서 위치 저장 :
\033[s
커서 위치 복원 :
\033[u
마지막 두 개는 사용하는 터미널 에뮬레이터에서 작동하지 않을 수 있습니다. 분명히, 단지 xterm
와 nxterm
두 시퀀스를 사용합니다.
그리고 이스케이프 시퀀스 중 하나를 사용하는 예제 : 커서를 3 행, 열 (문자) 9에 배치하고 싶다고 말하십시오.
\[033\[3;9H]
(열 0이 첫 번째 위치이므로 8 번째 문자라고 가정합니다).
출처 : http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html(6.2 참조 )
더 일반적인 독서 : http://ascii-table.com/ansi-escape-sequences.php
0;
색상 시퀀스 의 선행 은 필요하지 않습니다. 전경색을 설정하기 전에 배경색을 기본값으로 만듭니다. 로 배경을 설정할 수도 있습니다 4x
.
터미널에 대한 제어 명령입니다.
터미널은 원래 직렬 포트에 연결된 벙어리 장치 였으며 현재 메뉴가있는 멋진 멀티탭 GUI 소프트웨어는 아닙니다. 문자 스트림 (바이트) 만 수신 했으므로 데이터 (화면에 인쇄 할 내용)와 명령 (인쇄 방법) 사이에 명확한 구분이 없었습니다. 대신 명령은 특수 제어 문자로 표시됩니다.
명백한 제어 문자는 줄 바꿈 (줄 바꿈), 백 스페이스 및 벨 비프 음과 같지만보다 구체적인 명령은 문자로 시작하는 문자 시퀀스 ESC
(10 진수 27, 16 진수 0x1b 또는 033 8 진수)로 시작됩니다. 종종 ^[
또는 \033
으로 표현됩니다 .
시퀀스 ESC [
를 CSI 또는 제어 시퀀스 도입기라고하며 선택적인 숫자 매개 변수로 명령을 시작하며 일반적으로 기본 명령을 정의하는 문자로 끝납니다. 대부분의 공통 이스케이프 시퀀스는이 클래스에 속합니다.
이스케이프 코드의 목록은 예를 들어 console_codes(4)
매뉴얼 페이지 및 Wikipedia 페이지에서 ANSI 이스케이프 코드에 대한 정보를 찾을 수 있습니다 .
몇 가지 예 :
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Bash와 같은 명령을 테스트 할 수 있습니다. -e
내장 echo
명령은 플래그를 사용하여 문자를 \033
나타냅니다 ESC
.
예를 들어, 화면 중간에 인사말을 컬러로 인쇄하고 일반적으로 원래 커서 위치에 인사말을 인쇄합니다.
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
ESC ]
언급 한 순서 는 OSC 또는 운영 체제 명령으로, 창 제목 등을 설정하는 명령에서 주로 사용됩니다. xterm
예 :
echo -e '\033]0;new window title\a'
그런 다음 ESC ( A
일부 터미널에 국가 문자 세트를 설정하여 잠재적으로 재미있는 효과를내는 (및 다른 문자) 도 있습니다 .
오른쪽 대괄호 뒤에 나오는 이스케이프 escape]
는 운영 체제 명령 ( OSC
) 을 도입하는 데 사용됩니다 .
그것은에 ECMA-48 , 당신은 xterm에 의해 사용되는 제어 시퀀스 요약 읽을 수 텀 제어 시퀀스 터미널 창의 제목을 변경, 예를.
이스케이프 시퀀스는 다른 문자로 시작할 수 있습니다. C1은 (8 비트) 제어 문자의 텀 제어 시퀀스의 부분은 그 중 몇 가지 언급 : CSI
(당신이로 볼 수있는을 escape[
, APC
, DCS
, PM
. 한 쌍은 (탈출하기 때문에 다른 (두 번째) 문자에 대한 이유는 ]
)는과 관련된 다른 유형 의 이스케이프 시퀀스에 사용되는 단일 바이트 제어 문자 .
사양을 읽으면 CSI
숫자 매개 변수가있는 컨트롤에 사용되는 반면 OSC
문자열 을 허용 한다는 것을 알 수 있습니다. 단지 구문을 넘어,이 표준을 만든위원회에 대한 마음의 용도에 있었다 APC
하고 PM
있는이 달랐다 DCS
하고 OSC
.
이것을 ANSI 이스케이프 코드 라고 하며 console_codes 매뉴얼 페이지에 나열되어 있습니다. 그것들은 Bash 전용이 아니지만 터미널이 지원하는 한 모든 콘솔 응용 프로그램에서 작동합니다 (대부분의 터미널 에뮬레이터가 수행함).
다른 답변에 설명 된 "이스케이프 시퀀스"는 사용중인 터미널 유형 (대부분 "ANSI"또는 파생 / 유사한 터미널 유형)에 따라 다릅니다.
$ echo $TERM
xterm
터미널의 (어떤) 독립적이지만 여전히 색상 및 기타 특수 기능을 사용하는 스크립트를 작성하려면의 내용을 살펴보십시오 man terminfo
.
예 :
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
노란색 배경과 빨간색 전경색으로 인쇄 .test.
되며 test
실제로 동일한 방식으로 색상을 사용할 수있는 모든 터미널에서 작동합니다.
로, 실제로 인쇄되는 것을 파이프를 보려면 od -t x1z
에서와 같이
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... 여기서 값은 16 진수로 표시됩니다 ( "x"로 인해).