터미널에서 하나의 색상 코드를 다른 색상 코드로 바꾸는 방법은 무엇입니까?

터미널에서 하나의 색상 코드를 다른 색상 코드로 바꾸는 방법은 무엇입니까?

Bash가 자동으로 한 색상 코드를 다른 색상 코드로 바꾸도록 할 수 있나요? 예를 들어, 프로그램이 색상 코드로 묶인 텍스트를 굵은 전경으로 출력할 때마다 bash가 실제로 녹색 배경 코드 등을 사용하기를 원합니다.

내가 이것을 원하는 이유는 내 터미널 에뮬레이터(터미네이터)가 굵은 전경의 색상을 변경하는 것을 허용하지 않기 때문입니다. 예를 들어 echo -e "\e[1;39m Foo""Foo"는 내가 설정한 색상 팔레트에 관계없이 항상 흰색으로 출력되어 추악한 결과를 생성합니다. bash \e[1;37m\e[1;39m.

편집하다:termcap내가 이해한 바에 따르면, 내가 원하는 것을 하는 것은 bash 자체 의 문제에 가깝습니다 terminfo. 이 두 가지에 경험이 있는 사람이 있습니까?

답변1

Bash에는 Bash 자체에서 사용되는 색상을 제외하고는 응용 프로그램에서 사용되는 색상에 대한 규칙이 없습니다. 애플리케이션은 터미널과 상호작용합니다. bash는 애플리케이션을 시작하고 완료되면 알려줍니다.

애플리케이션은 다음을 통해 터미널과 통신하는 방법을 알고 있습니다.용어 모자(전통적인) 또는용어 정보(현대) 데이터베이스. Termcap은 색상보다 오래되었지만 terminfo는 색상에 대해 알고 있습니다. 저것 좀 봐(이거terminfo(5)매뉴얼 페이지시스템에서 지원하는 기능 목록을 검토하십시오. 개별 색상에 대한 제어 순서를 지정할 수 있는 방법은 없지만 이 기능을 사용하면 initc각 색상의 모양을 구성하여 본질적으로 동일한 결과를 얻을 수 있습니다. 예를 들어, 색상 1(보통 빨간색)의 모양이 밝은 녹색으로 변경됩니다.

tput initc 1 0 255 0

ncurses 데이터베이스에는 이 기능이 포함되어 있지 않습니다 terminator( xtermDebian jessie 버전 5.9부터). 그러나 이러한 터미널 에뮬레이터(및 기타 vte 기반 터미널)는 이 목적으로 사용할 수 있는 이스케이프 시퀀스를 지원합니다.OSC 4 ; c ; spec BEL. 빨간색을 밝은 녹색으로 바꾸는 방법은 다음과 같습니다.

printf '\e]4;1;#00ff00\a'

기본 색상은 0-7로 번호가 매겨져 있으며, 이 색상의 굵은 텍스트는 8-15의 색상을 사용합니다. 기본 색상 등에서 볼드체에 사용되는 색상 변경을 사용할 수도 있습니다(자세한 내용은 제어 시퀀스 목록 참조).OSC 5 ; 0 ; spec BEL

이러한 설정은 전경색과 배경색 모두에 영향을 미치며 전경색과 배경색에 독립적으로 영향을 줄 수는 없습니다.

색상 모양을 사용자 정의하려면 에서 시작할 수 있습니다 .bashrc. 이는 bash의 대화형 인스턴스를 실행하는 터미널에만 영향을 미치며 다른 응용 프로그램을 직접 시작하는 터미널에는 영향을 미치지 않습니다.

이것이 터미네이터의 팔레트 설정과 어떻게 상호 작용하는지 모르겠습니다.

관련 정보