당신은 그것을 사용할 수 있습니다 tput.

당신은 그것을 사용할 수 있습니다 tput.

예를 들어, 간단한 방법으로 컬러 텍스트를 화면에 출력하는 다음 방법을 찾았습니다.

RED="\033[0;31m" # Red color (via ANSI escape code);
NC='\033[0m' # No color (via ANSI escape code);
echo -e "${RED}This text is red. ${NC}" # -e flag allows backslash escapes;

또는:

printf '\e[1;34m%-6s\e[m' "This is blue text"

나는 또한 다음을 발견했습니다:

tput setaf 1; echo "this is red text"

그러나 나는 그것을 사용해 본 적이 없으며 tput모든 주요 배포판(Debian, CetnOS, Arch 등)과 함께 제공되는지 확실하지 않습니다.

내 질문

"지저분한" 색상 코드를 사용하지 않고 모든 주요 배포판에서 작업할 수 있는 간단한 방법으로 명명된 범용 색상(예: "빨간색")이 지정된 색상 텍스트를 출력하려면 어떻게 해야 합니까?

답변1

당신은 그것을 사용할 수 있습니다 tput.

tput모든 주요 배포판에 이 기능이 포함되어 있는지는 잘 모르겠습니다.

이는 ncurses의 일부이며 이 세 가지 운영 체제 및 기타 운영 체제와 함께 패키지되어 있습니다.

따라서 tput setaf필요한 패키지를 설치해야 한다는 분명한 조건 하에 광범위한 시스템에서 작동할 수 있습니다.

단점은 제공된 숫자가 ECMA-48의 8개 표준 색상 인덱스이기 때문에 이것을 사용하면 여전히 "비단어 색상 코드"를 사용하게 된다는 것입니다(일부 터미널 에뮬레이터에는 추가로 8개의 사실상 표준 색상이 있을 수 있습니다. 일부 장치에서는 ISO 8613-6 인덱스 색상을 사용하여 최대 256가지 색상을 표시할 수 있습니다.

보유 관점에서 볼 때 8가지 표준 ECMA-48 색상은 잘 알려져 있으며 색상 번호로서 "6"의 의미도 그다지 모호하지 않습니다.

을 사용할 수도 있습니다 setterm.

그러나 숫자 대신 이름을 사용하고(영어로만 제공되지만) 사람이 읽을 수 있는 명령을 더 찾고 있다면 이를 위한 몇 가지 광범위한 도구도 있습니다. 그 중 하나는 이며 setterm사용법은 다음과 같습니다.

% setterm --foreground red; echo "빨간색 텍스트입니다."

settermDebian, Fedora 및 Arch용 리포지토리의 util-linux 도구 세트에서 도구 세트를 찾을 수 있습니다 . 이 명령은 특정 기능을 달성하기 위해 다양한 Linux 관련 항목에 의존합니다.다른이 명령은 물론 BSD에서는 사용할 수 없는 작업을 수행할 수 있습니다. 도구 세트이름에서 알 수 있듯이 Linux는 구체적이고 이식성이 없습니다.

게다가 매뉴얼 페이지에서는 terminfo 데이터베이스를 참조한다고 주장하지만 색상 변경은 실제 프로그램이 문서에 설명된 대로 실행되지 않는 몇 가지 경우 중 하나입니다. 그것확실히setafterminfo의 및 기능을 참조하세요 setab. 대신 프로그램은 ECMA-48 SGR 30–37,39,40–47,49 제어 시퀀스를 하드와이어합니다.

또한 8에서 15까지의 다른 8가지 사실상의 표준 색상 인덱스를 지원하지 않습니다. 적어도 현재로서는 "밝은" 색상을 지원하는 Linux KVT의 기능을 따라잡지 못했습니다.수용하다ISO 8613-6 인덱스 및 직접 색상 제어 시퀀스(실제로 전체 24비트 색상을 구현하지는 않지만).

또한,하드와이어 코드의 버그로 인해 Debian Stable의 util-linux 버전은 setterm색상을 설정할 때 올바른 SGR 시퀀스를 내보내지 않습니다..

  • setterm.사용자 명령. 마이클 크릭. 2014년 5월.

...이제는 BSD에서도 마찬가지입니다.

setterm이 버그를 발견한 것은 제가 (우연히도) 방금 완성한 대체 를 작성하도록 영감을 준 것 중 하나였습니다 . 나는 Linux와 그 커널 가상 터미널에 관련된 (보통의) 내용을 복사하지 않았습니다. 대신, util-linux에는 없는 몇 가지 ECMA-48 항목을 추가했습니다 setterm(Linux KVT는 ECMA-48의 이 부분을 지원하지 않고 setterm그 루트는 Linux 전용 KVT이기 때문입니다). 또한 UTF-8, 실제 8비트 C1 제어 문자(및 해당 7비트 별칭) 지원 및 ISO 8613-6 직접 색상(터미널 유형이 이를 지원하는 것으로 알려진 경우)을 추가했습니다.

물론 이 구현은하다BSD가 존재합니다:

% 이름; printenv 용어
FreeBSD
가치를 얻다
% TERM=ansi setterm --7bit --foreground red|hexdump -C
00000000 1b 5b 33 31 6d |.[31m|
00000005
% setterm --7bit --foreground red|hexdump -C
00000000 1b 5b 33 38 3b 35 3b 31 6d |.[38;5;1m|
00000009
% setterm --7bit --foreground 192|hexdump -C
00000000 1b 5b 33 38 3b 35 3b 31 39 32 6d |.[38;5;192m|
0000000b
% setterm --7bit --foreground '#00BEC119'|hexdump -C
00000000 1b 5b 33 38 3b 35 3b 31 39 31 6d |.[38;5;191m|
0000000b
% TERM=vte-256color setterm --7bit --foreground '#00BEC119'|hexdump -C
00000000 1b 5b 33 38 3b 32 3b 31 39 30 3b 32 35 3b 31 39 |.[38;2;190;25;19|
00000010 33 6d |3m|
00000012
% TERM=ansi setterm --7bit --foreground '밝은 빨간색' --Background '밝은 노란색'|hexdump -C
00000000 1b 5b 39 31 6d 1b 5b 31 30 33 6d |.[91m.[103m|
0000000b
% setterm --7bit --foreground '밝은 빨간색' --Background '밝은 노란색'|hexdump -C
00000000 1b 5b 33 38 3b 35 3b 39 6d 1b 5b 34 38 3b 35 3b |.[38;5;9m.[48;5;|
00000010 31 31 6일 |11분|
00000013
%

이는 Nosh 도구 세트 버전 1.39에 util -linux라는 터미널 관리 패키지에 포함되어 있어 console-control-sequenceutil-linux와 공존할 수 있습니다. 명령의 shim 이름은 setterm별도의 shim 패키지에서 제공됩니다. 따라서 색상 변경을 위해 무언가를 작성했는데 setterm누군가 그것이 Linux에만 국한된 것이라고 주장한다면, 당신은 그들을 어디로 지시해야 할지 알 수 있습니다. 맨페이지를 미리보기로 포함시켰습니다.

  • 조나단 데보인 폴라드(2018).setterm. 스낵 가이드. 소프트웨어.

그건 그렇고, SGR 코드를 올바르게 얻으십시오.

SGR 0아니요"색이 없다". SGR 0은 모든 색상과 속성을 재설정합니다. 실제로 "아니요" 색상이라는 개념은 없습니다. 거기SGR 39 및 SGR 49에 의해 설정된 "기본" 색상 개념:

% setterm --7bit --foreground 기본값 --Background 기본값 |hexdump -C
00000000 1b 5b 33 39 6d 1b 5b 34 39 6d |.[39m. [49m|
0000000a
%

답변2

코드(ANSI 색상 코드)

코드는 배포판에 독립적입니다. 그들은 말기 의존적입니다. 일부 터미널에서는 이를 지원하지 않습니다. 그러나 그들은 대다수 인구의 지지를 받을 수 있습니다.

이름

예를 들어 변수를 사용하여 이름을 지정합니다.

red="$(tput setaf 1)"
echo "${red}hello"

참고: 쉘 변수에 대문자를 사용하지 마십시오. 대문자는 환경 변수에 예약되어야 합니다.

이름과 코드

이 코드는 색상 번호를 나타냅니다. 각 숫자의 색상은 단말기에 따라 정의되며 표준이 아닙니다. 사용자가 변경할 수 있습니다.

관련 정보