Help us understand the problem. What is going on with this article?

シェルスクリプトの出力に色をつけたい!

More than 3 years have passed since last update.

スクリーンショット 2016-11-02 10.19.34.png

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

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

:ghost: コマンド

# 文字と背景の色の色見本を表示する
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"

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

:jack_o_lantern: ちょっとだけ詳解

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 できれいにもとに戻しておくのが味噌です。

参考ページ

dojineko
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away