쉘 스크립트에서“친숙한”터미널 색상 이름?


25

"red"와 같은 색상 이름을 사용하여 터미널 스크립트를 더 쉽게 채색 할 수있는 Ruby 및 Javascript와 같은 언어의 라이브러리를 알고 있습니다.

그러나 Bash 또는 Ksh의 쉘 스크립트 또는 이와 비슷한 것이 있습니까?


8
정답을 표시하십시오. 지금까지 46 개의 질문 중 1 개만 표시했습니다!
m13r

답변:


39

bash 스크립트에서 색상을 다음과 같이 정의 할 수 있습니다.

red=$'\e[1;31m'
grn=$'\e[1;32m'
yel=$'\e[1;33m'
blu=$'\e[1;34m'
mag=$'\e[1;35m'
cyn=$'\e[1;36m'
end=$'\e[0m'

그런 다음 필요한 색상으로 인쇄하십시오.

printf "%s\n" "Text in ${red}red${end}, white and ${blu}blue${end}."

11

tput OR 을 사용할 수 있습니다printf

사용하여 tput,

아래와 같이 함수를 만들고 사용하십시오.

shw_grey () {
    echo $(tput bold)$(tput setaf 0) $@ $(tput sgr 0)
}

shw_norm () {
    echo $(tput bold)$(tput setaf 9) $@ $(tput sgr 0)
}

shw_info () {
    echo $(tput bold)$(tput setaf 4) $@ $(tput sgr 0)
}

shw_warn () {
    echo $(tput bold)$(tput setaf 2) $@ $(tput sgr 0)
}
shw_err ()  {
    echo $(tput bold)$(tput setaf 1) $@ $(tput sgr 0)
}

당신은 위의 함수를 사용하여 호출 할 수 있습니다 shw_err "WARNING:: Error bla bla"

사용 printf

print red; echo -e "\e[31mfoo\e[m"

2
echo -e에 적합하지 않으며 옵션에 printf따라 tput자동으로 적응하지 않는다는 경고가 필요합니다 $TERM.
Toby Speight


4

간단한 일반적인 용도 (후행 줄 바꿈과 함께 단일 색상의 전체 텍스트 줄) 를 위해 다음과 같이 jasonwryan의 코드 를 수정 했습니다 .

#!/bin/bash

red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'

printf "$green"   "This is a test in green"
printf "$red"     "This is a test in red"
printf "$yellow"  "This is a test in yellow"
printf "$blue"    "This is a test in blue"
printf "$magenta" "This is a test in magenta"
printf "$cyan"    "This is a test in cyan"

또는 Awk에서 약간 수정되었습니다.awk -v red="$(printf '\e[1;31m%%s\e[0m\\n')" -v green="$(printf '\e[1;32m%%s\e[0m\\n')" 'BEGIN { printf red, "This text is in red"; printf green, "This text is in green" }'
Wildcard

3

tput출력 / 터미널 기능에 따라 이스케이프 문자를 처리하는 것이 더 좋습니다 . 터미널 해석 할 수없는 경우 ( \e[*색상 코드를 당신이 있다면, 그것은 때로는. 읽기 어렵게 출력을 만드는 "오염"(또는 것 grep, 당신이 그와 같은 출력이 표시됩니다 \e[*결과 인치)

대한tput자습서를 참조하십시오 .

당신은 쓸 수 있습니다 :

blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;

다음은 터미널에서 컬러 시계를 인쇄 하는 자습서 입니다.

또한 tputSTDOUT을 파일로 리디렉션 할 때 여전히 이스케이프 문자가 인쇄 될 수 있습니다.

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

이를 방지하려면 이 솔루션tput 에서 제안한 대로 변수를 설정하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.