답변:
ANSI 이스케이프 시퀀스는 이스케이프 문자 (문자 27)로 시작하는 일련의 문자로 구성됩니다. 다음 문자는 항상 열린 대괄호입니다.
echo 명령은 이스케이프에 지정 -e
하고 사용 하면 이스케이프 문자를 보낼 수 있습니다 \e
.
ANSI 표준은 총 16 개의 가능성을 제공하는 8 가지 색상과 밝은 모드를 정의합니다. 순서는 다음과 같습니다.
\e[<number>m
다음 <number>
중 하나입니다 :
전경:
배경:
47 화이트
0 모두 재설정
따라서 전경을 빨간색으로 만들고 배경을 노란색으로 만들려면
$ echo -e "\e[31m\e[43m"
그리고 굵게 표시하려면 :
$ echo -e "\e[1m"
물론, 그것들을 모두 함께 결합 할 수 있습니다 :
$ echo -e "\e[31m\e[43m\e[1m"
다른 일을하기위한 많은 다른 탈출 코드가 있습니다.
예를 들어-화면을 지우고 커서를 왼쪽 상단으로 이동하십시오.
$ echo -e "\e[2J\e[1;1H"
색상을 변경할 때 유용합니다.
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
색상을 변경하고 화면을 지우고 커서를 왼쪽 상단에 놓습니다. 거의 왼쪽 위입니다. Echo는 캐리지 리턴을 삽입하여 줄 아래로 이동합니다. -n
까다로운 경우이를 방지하기 위해 에코에 추가 할 수 있습니다 .
모두 엉망이고 입력하는 것을 볼 수 없으면 다음을 눌러 터미널 색상을 정상으로 재설정 할 수 있습니다.
Ctrl+v [ 0 m Return
원하는 것은 명령 프롬프트입니다. 알 수없는 명령에 대해 울리지 만 다시하고있는 일을 볼 수 있습니다.
echo -ne '\e[31;43m'
위의 대신 더 짧은 것을 사용할 수도 있습니다 echo -e "\e[31m\e[43m"
.
최신 Xterm은 32 비트 색상을 지원합니다!
간단한 예입니다. 가치 # 53186f의 멋진 진한 자주색 배경 (각각 자신의 고유)을 설정하려면 다음을 수행하십시오.
echo -ne "\033]11;#53186f\007"
이렇게하면 후속 텍스트뿐만 아니라 전체 창의 색상이 즉시 변경됩니다. 서버에 ssh 한 후 창을 분명히 다르게 만드는 데 특히 유용합니다 (예 :). 위의 'echo'를 .bashrc에 넣으면 서버에 로그인 할 때 터미널이 자동으로 색상을 변경합니다 (그러나 Ctrl-D를 꺼도 다시 변경되지는 않습니다)
대부분의 문서는 원본 16 ANSI 색상에 대해서만 이야기합니다.
출처 : http://www.steike.com/code/xterm-colors/ 및 http://rtfm.etla.org/xterm/ctlseq.html ( "운영 체제 제어"참조)
참고 : 위의 이스케이프 시퀀스는 XTerm에 유효하며 XTerm처럼 "보일 수있는" "XTerm-like"윈도우 터미널 에뮬레이터의 다른 구현에서는 작동하지 않을 수 있습니다. 예를 들어, "gnome-terminal"또는 "konsole"은 이스케이프 시퀀스가 다르거 나 색상 변경을 전혀 구현하지 않을 수 있습니다.
예. ANSI 터미널은 ANSI 이스케이프 코드를 지원 합니다 . 각 Control Sequence Introducer
( CSI
) 코드는 다음 형식으로되어 있습니다 :
ESC[<<<CODE>>>
Ascii 문자 27
( ESC
문자) 또는 1b
16 진수로 표시되고 왼쪽 대괄호가 사용 된 다음 사용할 동작을 나타내는 문자입니다.
;
분리 된 매개 변수 목록은 매개 변수 바로 앞에 제공 될 수 있습니다 <<<CODE>>>
.
이제 색상은 CSI
코드 의 하위 세트 인 코드를 사용합니다 Select Graphic Rendition
. 이들은 다음과 같은 형태입니다.
ESC[<<<SGR>>>m
SGR
코드는 매개 변수로 전달됩니다 CSI
. 질문과 관련하여 SGR
코드 30-49가 있습니다. 코드 30-39는 전경색을 설정합니다. 코드 40-49는 배경색을 설정합니다.
30 - Foreground Black
31 - Foreground Red
32 - Foreground Green
33 - Foreground Yellow
34 - Foreground Blue
35 - Foreground Magenta
36 - Foreground Cyan
37 - Foreground White
40 - Background Black
41 - Background Red
42 - Background Green
43 - Background Yellow
44 - Background Blue
45 - Background Magenta
46 - Background Cyan
47 - Background White
코드 38과 48은 특수 코드입니다. RGB 값을 사용할 수있는 것입니다. 이러한 형식은 다음과 같습니다.
ESC[38;2;<r>;<g>;<b>m (Foreground)
ESC[48;2;<r>;<g>;<b>m (Background)
참고 : 대체 용도는 다음과 같습니다 \x1b[<3 or 4>8;5;<web safe color index>m
. 이 사용법을 사용하면 완전히 다른 색상 인코딩이 있습니다. 자세한 내용은이 답변 상단의 링크를 참조하십시오.
코드 39 및 49는 전경색과 배경색을 기본값으로 설정하며 터미널별로 정의됩니다.
실제로 색상 30-37 40-47은 레이블의 색상과 약간 다릅니다.
0 - Black
1 - Darker Red
2 - Darker Green
3 - Dark/Yellow or Brown (varies between terminals)
4 - Dark Blue
5 - Dark Magenta
6 - Dark Cyan
7 - Light Grey
밝은 색상을 얻으려면 SGI를 굵게 표시 1
합니다. 굵은 체는 잘못된 이름입니다. 글꼴을 굵게 표시하지 않습니다. 실제로 텍스트의 밝기가 증가합니다. 굵게 적용하면 색상이 다음과 같이됩니다.
0 - Dark Grey
1 - Bright Red
2 - Bright Green
3 - Bright Yellow
4 - Bright Blue
5 - Bright Magenta
6 - Bright Cyan
7 - White
주의 : 색상 번호의 마지막 두 블록은 앞뒤 배경 ( <index> + (30 or 40)
) 과 관련이 있습니다 .
모든 스타일을 제거하려면 (기본 / 정상 모드로 돌아 가기) SGR
0을 사용하십시오 .
CSI
코드가 모두 그래픽 인 것은 아닙니다. 예를 들어, ESC[2J
터미널이 지워집니다. ESC[<y>;<x>H
커서 위치를 설정합니다 (1 색인). 자세한 내용은 Wikipedia 기사를 참조하십시오.
참고 :이를 테스트하려면 echo -e
또는을 사용하십시오 printf
.
참고 : "^ ["는 이스케이프 문자이며 CTRL-V, CTRL- [로 삽입되며 ^ G는 벨 문자이며 CTRL-V, CTRL-G로 삽입
다음 블록은 내 .bash_profile에 있으며 내 시스템을 변경 한 다른 시스템에 로그온 한 후에도이 시스템의 xterm이 항상 흰색이되도록합니다.
perl -e '$e=chr(27);print "${e}[37m ${e}[40m ${e}[2J ${e}[1;1H";'
export PS1='^[[37m^[]0;${HOST}: ${PWD}^G^[[40m${USER}@${HOST}:${PWD}
--> '
또한 프로젝트 확인 ScriptEchoColor
완전히 bash는 스크립트에서 만든
이 우분투 패키지가 여기에
있지만 (최신이 또한 자식에서 다운로드 할 수 있습니다)하는 방법을 알고있는 경우이 스크립트는 어떤 배포판에 설치할 수 있습니다.
단축 또는 확장 색상 이름을 다음과 같이 사용할 수 있습니다.
echoc "@rRedFg@{/blue}BlueFg@{/GREEN}GreenBg"
샘플:
또한 문자뿐만 아니라 xterm 자체에 대한보다 광범위한 제어를 위해 xtermcontrol을 살펴보십시오 .
많은 ANSI CSI 코드 중에는 SGR 또는 Select Graphic Rendition이라는 코드 가 있습니다. 이것은 ESC,, [
parameters이며 m
, 여기서 매개 변수는 세미콜론으로 구분 된 ASCII 형식의 하나 이상의 정수입니다. 여러 위키 백과 페이지에 여러 가지 SGR 매개 변수가 나열되어 있습니다 (모든 매개 변수에 대해 자세히 설명하지는 않음).
같은 일부 매개 변수, 1
(굵게 또는 증가 된 강도) 및 31
(빨간색 텍스트)은 독립형이며, 개별적으로 사용하거나 결합, 같이 할 수 있습니다 ESC[31m
또는 ESC[1;31m
각각 표준 빨간색과 굵은 빨간색 전경 텍스트를 제공 할 수 있습니다.
다른 사람들은 매개 변수 자체를 취하는데, 이는 코드 뒤에 더 세미콜론으로 구분 된 숫자로 제공됩니다. 예를 들어, ESC[38;5;219m
확장 색상 번호 219로 전경 텍스트를 ESC[38;2;150;100;50m
표시하고 RGB 값 150, 100, 50으로 색상으로 표시합니다.이 경우 38
"확장 된 전경 색상 설정"명령은 항상 다음에 의해 수행됩니다. 부속 명령. 부속 명령 2
은 빨강, 녹색 및 파랑 구성 요소의 값인 세 가지 매개 변수를 사용합니다. 이와 달리 부속 명령 5
은 터미널이 구성된 테이블에서 색상을 지정하는 0에서 255 사이의 숫자를 하나 더 가져옵니다.
다음 코드 기능은이 코드를 사용하는 데 유용 할 수 있습니다.
sgr() {
local codes=${1:-0}; shift
for c in "$@"; do codes="$codes;$c"; done
echo -n -e "\e[${codes}m"
}
다음과 같이 사용할 수 있습니다.
normal=$(sgr 0)
red=$(sgr 31)
echo "Text can be $(sgr 1)made boldface$(sgr 0)" \
" or ${red}colored red${normal}" \
" or $(sgr 31 1)even both at the same time$(sgr)."
매개 변수를 sgr()
지정 하지 않으면 기본값은 SGR 코드 0으로 설정됩니다. 즉, 모든 속성을 끄고 텍스트를 해당 터미널의 기본값으로 재설정합니다.
ESC[38
... m
와 ESC[38
... m
캔 /해야 (정보의 소스에 따라 달라집니다 - 궁극적 인 하나의 존재가, 내가 생각 itu.int/rec/T-REC-T.416-199303-I가 )를 사용해야합니다, 그렇지 않으면, 문자 예약 :
(별도하는 매개 변수 요소를 가 있음) 그래서 ;
에만 완료 사이에 사용되는 매개 변수 문자열 - 예를 ESC[38;2;150;100;50m
작성해야 ESC[38:2::150:100:50m
...
2
와 150
, 노 하나를 - 내가 알고임을 빈 기본 사용할 수 있습니다에 가야한다 어떤 값을 적 정의했다 -하지만 종종 오프 놓친 ;
분리기로서 만 사용하는 것은 명세서에 따라 정보를 신뢰성있게 처리하는 것을 불가능하게한다.