伝統的な色名(赤、緑、青など)でメッセージを色で表示します。

伝統的な色名(赤、緑、青など)でメッセージを色で表示します。

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

関連情報