쉘 스크립트에 "친숙한" 터미널 색상 이름이 있습니까?

쉘 스크립트에 "친숙한" 터미널 색상 이름이 있습니까?

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

하지만 Bash, Ksh 또는 다른 언어의 쉘 스크립트와 비슷한 것이 있습니까?

답변1

다음과 같이 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}."

답변2

당신은 사용할 수 있습니다 tput 또는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"

답변3

zsh에서:

autoload -U colors
colors

echo $fg[green]YES$fg[default] or $fg[red]NO$fg[default]?

답변4

tput출력/터미널 기능에 따라 이스케이프 문자를 처리하는 것을 사용하는 것이 더 좋습니다 . (터미널이 \e[*색상 코드를 해석할 수 없으면 "tainted"되어 출력을 읽기 어렵게 됩니다. (또는 때로는 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다음에서 제안한 대로 변수를 설정하세요.이 솔루션.

관련 정보