"\ 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

마지막 두 개는 사용하는 터미널 에뮬레이터에서 작동하지 않을 수 있습니다. 분명히, 단지 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

위키 백과 : 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.