mac ターミナルの出力に色をつける

macのターミナルって、デフォルトの設定だと白黒でものすごく味気ない、、、
ということに気が付いてしまいました。

気づいてしまったら気になってしょうがない!
ということで、今回はmacのターミナルの出力に色をつけてみたいと思います。

タイトルにはわかりやすく「mac ターミナルの出力に色をつける」としていますが、
MacやUbuntuなどのbash系ターミナルでのお話になります。

やりたいこと

このように出力に色をつけたり、出力後に改行を挟んだり、$(ドルマーク)の前の文字列を変更したりと、
色々カスタマイズして行こうと思います。

ドルマーク以前の文字列を変更する

macのデフォルトのシェルbashでは、環境変数PS1というものが存在します。
この環境変数PS1に出力したい文字列をセットすることで、ドルマーク以前の文字列を変更することができます。

この設定は~/.bash_profileに記述しておくのが良いでしょう。
※~/.bash_profileとは、ターミナルが開かれる際に毎回呼び出される初期設定ファイルです。

例えば、~/.bash_profileに以下のように記述すると、

PS1="hoge"

このようにPS1に設定した値がシェルに現れます。

このPS1という環境変数にバックスラッシュでエスケープされた特殊な文字を使用することで、
日付や時刻、ユーザ名やホスト名などの色々な文字列を表示できるようになります。

\d週・月・日の順に日付を表示。 例:火 4 16
\hホスト名のトップのみを表示。 例:hoge
\Hホスト名を表示。 例:hoge.piyo.com
\j現在シェルで管理されているジョブの数を表示。
\lシェルのターミナルデバイス名のbasenameを表示。
\sシェルの名前を表示。環境変数$0のbasename。
\t24時間表示の時刻。フォーマットはHH:MM:SS。 例:20:16:45
\T12時間表示の時刻。 例:08:16:45
\@12時間表示の時刻。AM/PM表記付き。 例:08:16:45 PM
\uユーザ名の表示。
\vバッシュのバージョン表示。
\Vバッシュのバージョン+パッチのバージョン表示。
\w現在のディレクトリを表示。
\W環境変数$PWDのbasenameを表示。
\!コマンドのhistoryインデックスを表示。
\#コマンドのコマンドナンバーを表示。
\$ルートじゃなかったら”$”、ルートでログイン指定たら”#”が表示される。
\nnnASCIIコードが8進数値nnnである文字。???
\n改行を出力。
\rキャリッジリターンを出力。
\eカラーコードのエスケープに使用します。(カラーコードについては後で説明します。)
\aベル文字。???
\\バックスラッシュを出力。
\[かっこの中は表示しない文字列。(カラーコードの表記に使用。)
\]上に同じ。

たとえば以下のように設定すると、

PS1="¥t Hello! ¥u¥$"

このように、左から24時間表記の時刻、”Hello!”の文字列、ユーザ名、$(ドルマーク)の順に表示されます。

例えば、ubuntu風のターミナルにしたければ、以下のように設定します。
username@hostname:~/directory$ みたいな感じになります。

PS1="u@h:w$ "

表示される文字の色や書体を変更する

表示される文字の色や書体を変更するためには以下のような設定が用意されています。
色や書体の設定をする際には、その設定の周りを \[\e[   m\] で囲みます。

<書式の設定>

0装飾なし
1太字
2細字
3イタリック(斜体)
4下線

<色の設定>

30
31
32
33
34
35
36
37
39デフォルトに戻す

色の設定については、40~49番台で背景色を指定することができます。
また、設定をコロンでつなぐことで、複数の設定を一括で行うことが可能です。

例えば、以下のように設定すると、

PS1="¥t ¥[¥e[1;32m¥]Hello! ¥[¥e[m¥]¥u¥$"

このようになります。
“Hello!”の直前で、書式をBoldに、文字色を緑に(\[\e[1:32m\])変え、
“Hello!”のあとで元に戻して(\[\e[m\])います。

書式や文字色を設定する際には値を \[\e[   m\] で囲みますが、
この中に何も記述しないと、デフォルトの書式・文字色に戻ります。

アウトプット後に改行を入れる

コマンドを打った後に次の行がすぐに来ると結構見辛いので、出力後に改行を入れてみます。

function insert_blankline {
    if [[ -z ${IS_NOT_FIRST_LINE} ]]; then
        IS_NOT_FIRST_LINE=true
    else
        printf '¥n'
    fi
}
PROMPT_COMMAND='insert_blankline'

このPROMPT_COMMANDという変数はシェル特殊な変数で、コマンドが実行される度に呼ばれるものです。

ターミナル起動時に表示されるLast login:を消す

なぜかmacのターミナルには起動時に「Last login: いついつ。」という表示が出てきます。
正直、最後にいつログインしたかなんてどうでもいいので、私は消しています。

ホームディレクトリ直下に~/.hushloginという隠しファイル(ドットから始まるファイル)を置くことで表示を消すことができます。

$ touch ~/.hushlogin

上記コマンドを実行後にターミナルを再起動すると、「Last login: ~」の文字列が消えていると思います。

以上、皆さんもmacのターミナルをカスタマイズしてみてはいかがでしょうか。