이것은 ~/.bashrc에서 옵니다.
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
알아채다\033[01;32m
나는 \033[
그것이 제어 시퀀스 소개자라는 것을 알고 있습니다. 나는 32
녹색의 색상 코드를 알고 있습니다.
하지만 과 는 01;
무엇 입니까 m
?
어느 부분ANSI 이스케이프 코드그것은 \033[01;32m
속한다.
답변1
읽어야 할 표준은 ECMA-35와 ECMA-48입니다. ("ANSI"는 대체로 잘못된 이름입니다. 이 경우 "VT100 스타일"도 마찬가지입니다.)제어 순서네 부분으로 구성되어 있습니다:
- ㅏ제어 시퀀스 임포터(CSI) 문자, 현대 용어로는 U+009F, 1970년대 표준에서는 9/15
- 0 이상매개변수 문자, U+0030 ~ U+003F 범위에서 가져옴
- 0 이상중간 문자, U+0020 ~ U+002F 범위에서 가져옴
- 싱글최종 역할, U+0040 ~ U+007E 범위에서 가져옴
제어 시퀀스 도입자는 소위 범위에 있습니다.C1 제어 문자, 그 값의 범위는 U+0080부터 U+009F까지입니다.
1980년대 중반까지 터미널과 직렬 통신의 세계는 개인용 컴퓨터, BBS, Fidonet 등 세계의 선택 압력 덕분에 거의 완전히 8비트로 바뀌었습니다. 7비트가 여전히 피팅 시 중요한 문제였던 1970년대에 ECMA-38과 ECMA-45는 값이 7비트에 맞지 않는 C1 제어 문자에 대한 대체 7비트 인코딩 시스템을 제공했습니다. 약 40년이 지난 후에도 이 문자는 ␛
나중에 [
CSI의 7비트 인코딩이 된 이스케이프 문자( )에 여전히 자리잡고 있습니다 .
모든 C1 범위에는 대체 7비트 인코딩이 있음을 알 수 있습니다. 또한 이 사실을 모르는 사람들이 많다는 것을 알게 될 것입니다. 일부 소프트웨어가 인식하지 못함실제CSI 역할은 제어 시퀀스 도입자 역할을 합니다. 일부 소프트웨어는 모든 7비트 인코딩을 처리하지 않고 제어 시퀀스 도입자의 인코딩만 처리합니다. 반면 1980년대 중반까지 따라잡아 실제 C1 제어문자를 인식하는 소프트웨어도 있다.그렇지 않더라도7비트 인코딩.
따라서 특정 제어 순서를 분석하면 다음과 같습니다.
\033[
— 인코딩, CSI 문자의 7비트 인코딩추가 인코딩Bourne Again 쉘에서 처리되는 C 스타일 이스케이프 시퀀스01;32
— 5개의 매개변수 문자m
——최종 캐릭터
중간 문자(없을 수도 있음)와 마지막 문자의 조합은 제어 시퀀스의 기능을 지정합니다. 공급업체 확장용으로 예약된 전체 세트를 포함하여 이러한 기능이 많이 있습니다. (위의 제어 시퀀스 구조로 인해 알려지지 않은 벤더 확장도 스트림에서 처리/건너뛸 수 있습니다.) 이 경우에 나타나는 내용은 다음과 같습니다.그래픽 렌더링 설정(SGR)은 표준 제어 시퀀스 중 하나입니다.
매개변수 문자는 세미콜론으로 구분된 숫자 매개변수 문자열을 기본 10으로 인코딩합니다. (실제로 매개변수 문자열에는 더 많은 내용이 포함될 수 있습니다. 콜론은 유효한 매개변수 문자입니다. 결국 그 값은 U+003A입니다. 이후 ITU 표준에 따르면 콜론은 다음을 나타내는 데 사용됩니다.하위 매개변수. 이는 실제로 SGR에도 적용됩니다. 마찬가지로, DEC VT는 ?
표준 제어 시퀀스에 대한 특정 DEC 변형에 대한 확장 마커로 매개변수 문자 U+003F를 사용합니다 . ) SGR의 경우 이러한 매개변수는 인쇄에 대해 설정할 색상과 속성을 나타냅니다(예: "그래픽" 문자의 "재현").
이러한 것들이 많이 있으며, 이 특별한 경우에는 다음을 의미합니다.
01
- 볼드체32
— 녹색 전망
여기에는 IBM PC의 CGA 디스플레이 시스템과 호환되는 IBM PC를 터미널로 사용하는 방법에 대한 전체적인 여담이 있습니다. 굵게 색상 변경과 같은 글꼴 가중치가 발생했는데, 이러한 관습은 고맙게도 천천히 사라지고 있습니다. Bold는 실제로 다시 Bold를 의미합니다(CGA 이전 시대에 의미했던 것처럼). 이 규칙에 따르면 일부(다행히도 점점 더 적은) 터미널 에뮬레이터에서 이 SGR 시퀀스는 색상 #10(밝은 녹색)을 전경으로 효과적으로 설정합니다.
몇 년 전 AIXterm 터미널 에뮬레이터에서는 9~15 색상을 전경색과 배경색으로 설정하기 위해 SGR 90~97 및 100~107을 도입했습니다. 16색 규칙은 이제 일반화되었을 뿐만 아니라256색상 팔레트 규칙은 꽤 오랫동안 존재해 왔습니다. 전경색 #10을 얻는 보다 안정적인 방법은 SGR 92를 사용하는 것입니다.아니요SGR 1;32.
일반 쉘 프롬프트에서는 이것이 필요하지 않습니다. 예: Z 쉘을 사용하면 사용자가 특정 제어 시퀀스를 직접 인코딩하는 대신 C 스타일 이스케이프를 사용하여 색상 및 속성 변경 사항을 인코딩할 수 있습니다.백분율 순서PS1
다양한 프롬프트에 대한 , RPROMPT
및 유사한 쉘 변수 에 사용됩니다. Z 쉘은 terminfo 데이터베이스에서 해당 제어 시퀀스를 찾습니다. 따라서 Z 셸의 유사한 프롬프트 문자열은 다음과 같습니다.
PS1=%B%F{녹색}%n@%m%f%b또는 색상 #10이고 볼드체를 실제로 원하지 않는 경우:
PS1=%F{10}%n@%m%f
마지막으로: 이것들은아니요"VT100 스타일". 사람들은 종종 VT100을 일반화라고 부릅니다. 이것은 실수입니다. 이는 "VT100 스타일"이 아닌 ECMA-48 제어 시퀀스입니다. 초보자에게 중요한 사실은 VT100이단색이다그리고 다중 색상 기능이 없습니다. "vt100" 또는 "vt102"를 이름으로 남용하는 나쁜 습관에 빠지지 마십시오.
추가 읽기
- 문자 코드 구조 및 확장 기술 . ECMA-35. 6판. 1994. ECMA 인터내셔널.
- 문자 세트 인코딩을 위한 제어 기능. ECMA-48. 5판. 1991. ECMA 인터내셔널.
- https://unix.stackexchange.com/a/197291/5132
답변2
연구 결과에 따르면 다음과 같습니다.
\033[01;32m
- 부분ANSI 이스케이프 코드어느 것이 속하는지\033[01;32m
이라고 합니다그래픽 렌더링(SGI) 터미널 출력 순서 선택(그 안에 코드가 있습니다CSI n m
.)\033[
- 는제어 시퀀스 임포터01
— "대담하거나 증가된 강도"에 대한 코드입니다.;
— 구분 기호입니다.암호. 우리는 얼마든지 가질 수 있다암호우리가 원했던 대로. 그런 분들을 위한 테이블이 있어요암호Wikipedia 페이지의 내용ANSI 이스케이프 코드존재하다그래픽 렌더링(SGR) 매개변수 선택.32
전경 녹색 텍스트에 대한 코드입니다.m
전체 시퀀스를CSI n m
SGI 시퀀스로 표시합니다.