シェルスクリプトに「おなじみの」ターミナルカラー名がありますか?

シェルスクリプトに「おなじみの」ターミナルカラー名がありますか?

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次の提案に従って変数を設定してください。このソリューション

関連情報