컬러 출력 - Bash

컬러 출력 - Bash

나는 몇 가지 답변을 보았지만 그들은 모두 이것에 대해 이야기합니다 echo. Bash에서 명령 출력의 색상을 변경하는 방법은 무엇입니까? 예를 들어, hostname명령의 출력을 색상화 하고 싶습니다 .

$ hostname 
Nameofcomputer <--- Just the output to be colored and then it returns to default color of the shell.

답변1

제안해 주신 @finefoot 덕분에 이 코드가 작동하는 것 같습니다.

#!/bin/bash

case $1 in
  red)     col=$'\e[1;31m' ;;
  green)   col=$'\e[1;32m' ;;
  yellow)  col=$'\e[1;33m' ;;
  blue)    col=$'\e[1;34m' ;;
  magenta) col=$'\e[1;35m' ;;
  cyan)    col=$'\e[1;36m' ;;
esac

printf "%s" "${col}"

shift
exec "$@"

용법

그것이 호출된다고 가정하고 set-color, 그것을 호출하는 데 사용하십시오 set-color red hostname.

설명하다

  • Jasonwryan의 답변에 따르면 케이스 블록은 색상을 정의합니다.여기.
  • 이 스크립트는 이 색상을 설정하는 데 사용됩니다 printf.
  • shift스크립트에 입력된 첫 번째 옵션(예: 색상)을 제거합니다.
  • exec "$@"그런 다음 나머지 스크립트를 실행합니다.

답변2

이미 이 작업을 수행할 수 있는 프로그램이 있습니다. 예를 들어 grc다음은 하나입니다.

로그 파일, 명령 출력, 임의 텍스트 색상을 지정하는 데 사용할 수 있는 범용 셰이더입니다. 정규식을 통해 구성할 수 있습니다.

여기에 이미지 설명을 입력하세요.

[저는 보통 텍스트 이미지를 사용하는 것을 좋아하지 않지만 StackExchange에 색상 서식 옵션이 없는 것 같습니다.]

아니면 있다source-highlight.

바라보다명령 출력을 가져와 미리 정의된 구성표에 따라 색상을 지정할 수 있는 셰이더 유틸리티가 있습니까?슈퍼유저도 사용 가능

답변3

tput setaf 1; hostname; tput sgr0

tput터미널 데이터베이스의 해당 기능을 쿼리합니다. 여기는setafANSI 색상 1 설정(빨간색), sgr0렌더링할 그래픽 선택 없음기본 속성을 반환합니다. 그 외에도 (원본 쌍)을 사용하여 배경색과 전경색만 재설정하고 다른 그래픽 속성(굵게, 밑줄, 강조 표시, 반전...)은 그대로 둘 tput sgr0수 있습니다 .tput op

zsh, tcsh또는 와 같은 일부 셸에는 fish데이터베이스 쿼리 또는 색상 이름을 ANSI 코드에 매핑하는 기능이 내장되어 있습니다(예: zsh또는fish), 하지만 bash.

에서는 zsh프롬프트 확장을 사용하여 다음의 호스트 이름을 인쇄합니다 red.

print -P '%F{red}%m%f'

( %f전경색만 재설정)

tcsh내장 기능 이나 내장 기능 zsh이 있는 terminfo echotc대신 termcap 코드를 사용하십시오 .

echotc AF 1; hostname; echotc me

(최신 버전과 같은 terminfo 코드 setab/sgr0의 경우 zsh)echotitput

에서는 매개변수 확장 플래그 zsh%매개변수 확장 시 프롬프트 확장을 켜므로 다음을 수행할 수 있습니다.

red=%F{red} normal=%f

echo ${(%)red}whatever%{(%)normal}

에서는 어시스턴트가 콘텐츠를 컬러로 작성하도록 실행할 수 있는 자동 로드 가능 기능 zsh도 찾을 수 있습니다 .colors

autoload colors; colors

echo $fg[red]whatever$fg[default]

관련 정보