"\ 033]"으로 시작하는 이스케이프 시퀀스는 어떤 유형의 시퀀스입니까?


19

Bash에서로 시작하는 많은 이스케이프 시퀀스를 찾았 \033]지만 이러한 시퀀스는 무엇이며 왜 시작 \033]합니까?

답변:


25

실제로 문자열은 \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

마지막 두 개는 사용하는 터미널 에뮬레이터에서 작동하지 않을 수 있습니다. 분명히, 단지 xtermnxterm두 시퀀스를 사용합니다.

그리고 이스케이프 시퀀스 중 하나를 사용하는 예제 : 커서를 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

위키 백과 : https://en.wikipedia.org/wiki/ANSI_escape_code



2
'\ 033'은 8 진수로 된 ESCAPE 문자이므로 10 진수 (27) 또는 16 진수 (0x1B)로 지정할 수 있습니다. 셸 스크립트에서 '^ [', bindkey에서 "\ e"등과 같은 ESCAPE를 작성하는 다른 일반적인 방법이 있습니다.
jamesqf

1
해당 테이블의 여러 항목이 잘못되거나 부정확하다는 점에 유의하십시오. 굵게, 희미하게, 밑줄 등은 색상과 독립적으로 설정 및 재설정 할 수 있으며 색상과 함께 0으로 재설정됩니다. 백그라운드에는 완전히 별도의 코드 세트 (40–49)가 있으며 대신 7은 전경과 백그라운드를 바꿉니다. ESC [2K는 커서 전후에 전체 줄을 지 웁니다. 훨씬 좋은 소스는 Wikipedia 기사이거나 ECMA-48 섹션 8.3.117 SGR – Select Graphic Rendition 으로 직접 갈 수 있습니다 .
deltab

문구 "다음 문장의 각 끝 부분에 'm'문자가 정지 문자로 사용됩니다" cplusplus.com 게시물도 그냥 아래의 표는 분명히 종료되지 않는 명령이 포함되어 있기 때문에, 혼란 조금 "미디엄". 실제로 맨 위에 표시되면 여기에서 훨씬 더 오도 된 것처럼 보입니다.
ilkkachu

1
기술적으로 0;색상 시퀀스 의 선행 은 필요하지 않습니다. 전경색을 설정하기 전에 배경색을 기본값으로 만듭니다. 로 배경을 설정할 수도 있습니다 4x.
Fund Monica의 소송

17

터미널에 대한 제어 명령입니다.

터미널은 원래 직렬 포트에 연결된 벙어리 장치 였으며 현재 메뉴가있는 멋진 멀티탭 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일부 터미널에 국가 문자 세트를 설정하여 잠재적으로 재미있는 효과를내는 (및 다른 문자) 도 있습니다 .


8

오른쪽 대괄호 뒤에 나오는 이스케이프 escape]운영 체제 명령 ( OSC) 을 도입하는 데 사용됩니다 .

그것은에 ECMA-48 , 당신은 xterm에 의해 사용되는 제어 시퀀스 요약 읽을 수 텀 제어 시퀀스 터미널 창의 제목을 변경, 예를.

이스케이프 시퀀스는 다른 문자로 시작할 수 있습니다. C1은 (8 비트) 제어 문자의 텀 제어 시퀀스의 부분은 그 중 몇 가지 언급 : CSI(당신이로 볼 수있는을 escape[, APC, DCS, PM. 한 쌍은 (탈출하기 때문에 다른 (두 번째) 문자에 대한 이유는 ])는과 관련된 다른 유형 의 이스케이프 시퀀스에 사용되는 단일 바이트 제어 문자 .

사양을 읽으면 CSI숫자 매개 변수가있는 컨트롤에 사용되는 반면 OSC문자열 을 허용 한다는 것을 알 수 있습니다. 단지 구문을 넘어,이 표준을 만든위원회에 대한 마음의 용도에 있었다 APC하고 PM있는이 달랐다 DCS하고 OSC.



1

다른 답변에 설명 된 "이스케이프 시퀀스"는 사용중인 터미널 유형 (대부분 "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"로 인해).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.