%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EB%A9%94%EC%8B%9C%EC%A7%80%EB%A5%BC%20%EC%83%89%EC%83%81%EC%9C%BC%EB%A1%9C%20%ED%91%9C%EC%8B%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
Ubuntu 18.04 및 GNU bash, 버전 4.4.20(1) 릴리스(x86_64-pc)를 사용하는 WSL.
메시지를 표시하고 싶어요전통적으로 명명된 색상-red
, 또는 -green
, 또는 -blue
이와 유사한 인수로 (최종 사용자가 기계 구문을 사용하여 색상을 정의할 필요가 없습니다.).
printf
나는 현대 버전의 or 조차도 echo
이것을 할 수 없다고 생각합니다 .
나는 쉘이 내장되어 있고 아무것도 설치하지 않는 것을 선호합니다.
답변1
세텀 괜찮나요?
setterm -foreground red
답변2
먼저 색상 단어를 변수로 정의한 다음 printf 또는 echo와 함께 사용할 수 있습니다.
RED='\033[0;31m'
NONE='\033[0m' # reset colour attribues
printf "${RED}This is in red ${NONE}\n"
일부 색상 코드는 다음과 같습니다.
Black 0;30 Dark Gray 1;30
Red 0;31 Light Red 1;31
Green 0;32 Light Green 1;32
Brown/Orange 0;33 Yellow 1;33
Blue 0;34 Light Blue 1;34
Purple 0;35 Light Purple 1;35
Cyan 0;36 Light Cyan 1;36
Light Gray 0;37 White 1;37
답변3
내 코드 샘플은 아래와 같습니다. 잠자리에 들 준비가 되었습니다. 모든 것이 명확해졌으면 좋겠습니다.
tput_init_linux () { set_fg_color='tput setaf'; reset_color=$(tput sgr0 2>/dev/null); } # terminfo
tput_init_bsd () { set_fg_color='tput AF'; reset_color=$(tput me 2>/dev/null); } # termcap
tput_init_none () { set_fg_color=':'; reset_color=; } # the null command (:) ignores everything after it
if tput setaf 1 >/dev/null 2>&1; then tput_init_linux || tput_init_none;
elif tput AF 1 >/dev/null 2>&1; then tput_init_bsd || tput_init_none;
else tput_init_none; fi
no_color () { printf '%s' "$reset_color"; }
colorize ()
{
case "$1" in
(red) $set_fg_color 1 ;;
(green) $set_fg_color 2 ;;
(yellow) $set_fg_color 3 ;;
(blue) $set_fg_color 4 ;;
(magenta) $set_fg_color 5 ;;
(cyan) $set_fg_color 6 ;;
(white) $set_fg_color 7 ;;
(*) printf '%s\n' "[ERROR] This color ('$1') is not supported by the colorize() function. Quiting!" >&2; exit 1 ;;
esac
}
print_ok () { colorize green; printf '%s' '[OK] '; no_color; }
print_notice () { colorize cyan; printf '%s' '[NOTICE] '; no_color; }
print_debug () { colorize yellow; printf '%s' '[DEBUG] ' >&2; no_color; }
print_error () { colorize red; printf '%s' '[ERROR] ' >&2; no_color; }