通过传统颜色名称(例如红色、绿色、蓝色等)以颜色显示消息

通过传统颜色名称(例如红色、绿色、蓝色等)以颜色显示消息

使用 Ubuntu 18.04 和 GNU bash 的 WSL,版本 4.4.20(1)-release (x86_64-pc)。

我希望显示一条消息传统命名的颜色通过诸如-red、 或-green、 或-blue之类的参数或类似的东西(无需最终用户使用机器语法定义颜色)。

我认为即使是现代版本的printfor也echo无法做到这一点。

我更喜欢 shell 内置的并且不安装任何东西。

答案1

setterm 可以吗?

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; }

相关内容