perlのコアモジュールTerm::ANSIColorを使ってコンソール出力に色付けができる。
今まで、tputというコマンドがあるんで、そっちを使って色付け(※1)していたが、
環境によってインストールされていないこともあるので、
代わりにPerlのコアモジュールに含まれるTerm::ANSIColorを使う方が良い気がします。
Ubuntu, CentOS, MacOS, Cygwinなどでは、perlは入ってるんで。
Term::ANSIColorのリファレンス
https://perldoc.perl.org/5.8.8/Term/ANSIColor.html
直接ANSIエスケープシーケンス書いて出力すればいいんじゃない?
って思うんですが、ターミナルの環境によって正しく出力できない場合(※2)があるので、
tputもしくは、Term::ANSIColorで正しく動作させる事ができるのと、
Term::ANSIColor 使った方が可読性がよいと思います。
Term::ANSIColorのサンプル
function color_blue() {
perl -MTerm::ANSIColor=:constants -e "print BLUE \"$1\", RESET . \"\n\""
}
color_blue "This message color is blue."
こんな感じでShellScript内に関数定義しておくと便利。
※1 tputコマンドを使った実装例
function color_green() {
if which tput > /dev/null 2>&1; then
echo "$(tput setaf 2)$1$(tput sgr 0)"
return
fi
echo "$1"
}
color_green "This message color is green."
こちらは、tputコマンドがない場合も想定して、whichでコマンドあるかどうかのチェックもしてました。
※2 実際、IntelliJ IDEAのターミナル上で正しく出力されない事があった。