web-dev-qa-db-ja.com

シェルスクリプトでの「フレンドリーな」端末色名?

RubyやJavascriptなどの言語のライブラリは、 "red"のような色名を使用して端末スクリプトの色付けを簡単にするために知っています。

しかし、BashやKshなどのシェルスクリプトにこのようなものはありますか?

26
themirror

次のように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}."
40
jasonwryan

tput OR 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"
12
Rahul Patil

zshの場合

autoload -U colors
colors

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

単純な一般的な用途(単一行のみのテキストの完全な行、末尾の改行)のために、 jasonwryanのコード を次のように変更しました。

#!/bin/bash

red='\e[1;31m%s\e[0m\n'
green='\e[1;32m%s\e[0m\n'
yellow='\e[1;33m%s\e[0m\n'
blue='\e[1;34m%s\e[0m\n'
Magenta='\e[1;35m%s\e[0m\n'
cyan='\e[1;36m%s\e[0m\n'

printf "$green"   "This is a test in green"
printf "$red"     "This is a test in red"
printf "$yellow"  "This is a test in yellow"
printf "$blue"    "This is a test in blue"
printf "$Magenta" "This is a test in Magenta"
printf "$cyan"    "This is a test in cyan"
5
Wildcard

出力/ターミナルの機能に応じてエスケープ文字を処理するtputを使用することをお勧めします。 (端末が\e[*カラーコードを解釈できない場合、それは「汚染され」、出力が読みにくくなります。(または、そのような出力をgrepした場合、それらの\e[*結果で)

これを見てください tputのチュートリアル

あなたは書ける :

blue=$( tput setaf 4 ) ;
normal=$( tput sgr0 ) ;
echo "hello ${blue}blue world${normal}" ;

チュートリアルはこちら 端末に色付きの時計を印刷します。

また、tputは、STDOUTをファイルにリダイレクトするときにエスケープ文字を出力する場合があることに注意してください。

$ myColoredScript.sh > output.log ;
# Problem: output.log will contain things like "^[(B^[[m"

これが発生するのを防ぐには、 この解決策 で提案されているようにtput変数を設定します。

3
el-teedee