シェルスクリプトの出力をカラフルにする話。

header

シェルスクリプトを書いていると、OKとかFAILEDとか 実行結果の出力に色をつけたいシチュエーションってありますよね。 使いたいときにぱっと頭にカラーコードが浮かべばいいけどなかなかそうは難しい。。。

なのでザクッと全部表示しちゃうコマンドをいつも使ってるので紹介します。

👻 コマンド

# 文字と背景の色の色見本を表示する
for fore in `seq 30 37`; do printf "\e[${fore}m \\\e[${fore}m \e[m\n"; for mode in 1 4 5; do printf "\e[${fore};${mode}m \\\e[${fore};${mode}m \e[m"; for back in `seq 40 47`; do printf "\e[${fore};${back};${mode}m \\\e[${fore};${back};${mode}m \e[m"; done; echo; done; echo; done; printf " \\\e[m\n"

screenshot

これを実行すると、スクショにあるような色見本を得ることができます。 後は使いたい組み合わせをコピって printfecho -e に渡すだけ! (※ macOS だと echo -e が使えないので printf に渡すのが無難です。)

🎃 ちょっとだけ詳解

32 とか 41 とかなんのこっちゃいという感じですが、実はここで色を指定しています。 基本的には \e[文字色2桁;背景色2桁m という組になっていて、それぞれ下記のように意味を持っています。

3x 文字の色
4x 背景の色

x0 黒
x1 赤
x2 黄
x3 緑
x4 青
x5 紫
x6 水
x7 白

ここにさらに、太字や点滅といった属性を追加するには更に ; で区切って数字を与えます。 紹介したコマンド中では 1(太字), 4(下線), 5(点滅) も合わせて出力しています。

1 太字
2 弱強調
4 下線
5 点滅
7 反転
8 非表示

なお、点滅はターミナルソフトで有効にしていないと点滅してくれません。

設定した後はもとに戻してあげないと永遠とその色とスタイルで出力されてしまうので、 HTMLの閉じタグよろしく、使った後は \e[m できれいにもとに戻しておくのが味噌です。

参考ページ


関連リンク