bashプロンプトの「色・表示形式の変更」と「Gitブランチ表示」の解説

LinuxやWSL(Windows Subsystem for Linux)で作業していると、

  • プロンプトが見づらい…
  • プロンプトを色付きで表示したい…
  • プロンプトにGitブランチを表示したい...
  • プロンプトをかっこいい見た目にしたい…

と思うことはありませんか?

bashでは「PS1(Prompt String 1/primary prompt string)」という環境変数を設定することで、プロンプトの見た目を自由にカスタマイズできます。

この記事では、bashのプロンプトの見た目について、以下の内容をサンプルコードや図を用いてわかりやすく解説しています。

  • bashのプロンプトの表示形式を変更する方法
    • bashのプロンプトの仕組み(PS1とは?)
    • 環境変数PS1を一時的に変更する方法
    • よく使う環境変数PS1の特殊コード一覧
  • bashのプロンプトの色を変更する方法
  • bashのプロンプトのカスタマイズ例
    • ユーザー名を緑色、ホスト名を赤色、ディレクトリを青色にする
    • 時刻入りのプロンプト
    • Gitブランチ入りのプロンプト
  • bashのプロンプトの環境変数PS1を永続的に設定する方法

bashのプロンプトの表示形式を変更する方法

bashのプロンプトは環境変数PS1でカスタマイズできます。

具体的には、PS1はターミナルの一番左にある[user01@pc01 work]$のような見た目をカスタマイズできます。

bashのプロンプトは環境変数PS1でカスタマイズできる

この部分の「順番」「色」「表示する内容」などは、すべて環境変数PS1の設定で変えられます。

多くのLinux(RHEL8 / CentOS系)では、デフォルトで環境変数PS1は以下のようになっています。

$ echo $PS1
[\u@\h \W]$ 

ここに含まれる\u\hが、プロンプトに表示する情報を表す特殊コードです。それぞれの意味は以下のようになっています。

特殊コード意味
\uユーザー名(例:user01)を表示する。
\hホスト名(例:pc01)を表示する。
\Wカレントディレクトリ(末尾のディレクトリだけ)を表示する。
\$通常ユーザーは$、rootは#

そのため、環境変数PS1[\u@\h \W]\$の場合において、ユーザー名がuser01、ホスト名がpc01、カレントディレクトリが/home/user01/workの場合、bashのプロンプトは以下のようになり、ユーザー名、ホスト名、カレントディレクトリが[]内に表示されています。

デフォルトの環境変数PS1によるbashプロンプトの見た目

補足

環境変数PS1を以下のようにすると、こんな感じに色を付けることもできます(以下の内容についてはこれから詳しく解説します)。

export PS1="[\[\e[32m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]]$ "

表示例

bashプロンプトには色を付けることができる

環境変数PS1を一時的に変更する方法

まずは、もっとも簡単な「その場だけ環境変数PS1を変更する方法」から説明します。

以下に示すように、環境変数PS1の値を直接書き換えるだけで、表示されるプロンプトは即座に変わります。

環境変数PS1を一時的に変更する方法

ただし、ターミナルを閉じると元の設定に戻るため、「ちょっと試してみたい」「どんな見た目になるか確認したい」という場合に最適です。

一時的変更のポイント

  • ターミナルを閉じれば元の設定に戻る
  • bashの動作に影響はないので安心
  • プロンプトのカスタマイズのテストに最適

よく使う環境変数PS1の特殊コード一覧

環境変数PS1では、単に文字列を書くのではなく、「特殊コード(エスケープシーケンス)」を使ってさまざまな情報を表示できます。

たとえば、

  • ユーザー名
  • ホスト名
  • カレントディレクトリ
  • 時刻
  • bashのバージョン
  • シェル名

などを自由に組み合わせて、見やすいプロンプトを作ることができます。

主な特殊コードと意味一覧を以下に示します。

特殊コード意味
\aASCIIのベル文字(07)を出力する。
ビープ音が鳴る。
\d日付を「曜日 月 日の形式(例: Tue Mar 19)」で表示する
\eASCIIのエスケープ文字(033)を表示する。
\033と書いても同じ。
\hホスト名(例:pc01)を表示する。
\Hホスト名をFQDNで表示する。
\n改行する(New Line)。
\r復帰する(Carriage Return)。
\s使用しているシェルの名前を表示する。
\A現在時刻を24時間表記のHH:MMで表示する。
\t現在時刻を24時間表記のHH:MM:SSで表示する。
\T現在時刻を12時間表記のHH:MM:SSで表示する。
\@現在時刻を12時間表記のHH:MM AM/PMで表示する。
\uユーザー名(例:user01)を表示する。
\vbashのバージョンを表示する。
\Vbashのリリース番号を表示する。
\wカレントディレクトリをフルパスで表示する(ホームディレクトリ配下は~に省略される)。
\Wカレントディレクトリ(末尾のディレクトリだけ)を表示する。
\!このコマンドの履歴番号を表示する(historyコマンドの番号に一致する)。
\#シェル起動後のコマンド通し番号を表示する
\$通常ユーザーは$、rootは#
\[画面に表示しない制御シーケンスを開始する。
これを使って文字の色などの制御シーケンスを埋め込む。
\]画面に表示しない制御シーケンスを終了する

後ほど詳しく解説しますが、最後の\[\]は重要です。プロンプトに「色」を付けるときは\e[色や装飾のコードmのコードを使いますが、このコードを\[ ... \]の中に埋め込みます。

実際に各特殊コードの出力を見てみると、以下のようになります。

よく使う環境変数PS1の特殊コードとその表示例

bashのプロンプトの色を変更する方法

bashのプロンプトの色は以下の形式で指定することができます。

\[\e[色や装飾のコードm\]

\e[色や装飾のコードm\[ ... \]で囲んでいますね。これを環境変数PS1に組み込むと、プロンプトに好きな色をつけられます。

補足

\e\033と書いても同じなので、以下のような形式でも指定できます。

\[3[色や装飾のコードm\]

例えば、赤色にする場合には、以下のように指定します(31を指定すると、赤色になります)。

\[\e[31m\]

例えば、環境変数PS1を以下のようにすると、赤色で表示されていることがわかります(末尾の[\e[0m]は設定をリセットするために追加しています)。

bashのプロンプトの色を変更する方法(赤色にする)

ここで、代表的な「色や装飾のコード」を以下にまとめます。

コード概要
0すべてを未設定(デフォルト)に戻す。
\[\e[0m\]と書いても、0を書かずにmだけで、\[\e[m\]と書いても同じ扱い。
1太字(ボールド)で表示。
2薄い文字(フェイント)で表示。
3斜体(イタリック)で表示。
4下線(アンダーライン)を引く。
5点滅(ブリンク)させる。
現代の端末では無効化されていることが多い。
6高速点滅させる。
現代の端末では無効化されていることが多い。
7リバース(前景色と背景色を反転させる)。
8文字を隠す(不可視)。
9取り消し線(ストライクスルー)。
30前景色:黒(#000000
31前景色:赤(#ff0000
32前景色:緑(#00ff00
33前景色:黄(#ffff00
34前景色:青(#0000ff
35前景色:マゼンタ(#ff00ff
36前景色:シアン(#00ffff
37前景色:白(#ffffff
38前景色:拡張色
38;5;x(256色パレットの色番号で指定する)
 例:38;5;196(真っ赤)
または
38;2;r;g;b(RGBで指定する)
 例:38;2;255;100;0(オレンジ)
39前景色をデフォルトに戻す。
0(リセット)と違い、前景色だけをリセットできるのがポイント。
40背景色:黒(#000000
41背景色:赤(#ff0000
42背景色:緑(#00ff00
43背景色:黄(#ffff00
44背景色:青(#0000ff
45背景色:マゼンタ(#ff00ff
46背景色:シアン(#00ffff
47背景色:白(#ffffff
48背景色:拡張色
48;5;x(256色パレットの色番号で指定する)
 例:48;5;196(真っ赤)
または
48;2;r;g;b(RGBで指定する)
 例:48;2;255;100;0(オレンジ)
49背景色をデフォルトに戻す。
0(リセット)と違い、背景色だけをリセットできるのがポイント。

なお、2つ以上のコードを同時に適用したい場合は、セミコロン;でつないで1つの指定にまとめます。一例を以下に示します。

\[\e[0;31m\]  : リセットして標準の赤
\[\e[1;31m\]  : 太字の赤
\[\e[4;31m\]  : 下線を引いた赤

色や装飾の設定後には、リセットは必須です。最後に\[\e[0m\]または\[\e[m\]で設定をリセットしないと、入力した文字も色付きで表示されるので注意してください。

bashのプロンプトの色を変更する方法(設定をリセットしていない場合)

bashのプロンプトのカスタマイズ例

では実際に、bashのプロンプトの表示形式や色を変更したカスタマイズ例を見てみましょう。

ユーザー名を緑色、ホスト名を赤色、ディレクトリを青色にする

PS1="[\[\e[32m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]]$ "

表示例

bashのプロンプトのカスタマイズ例(ユーザー名を緑色、ホスト名を赤色、ディレクトリを青色にする)
  • ユーザー名 → 緑(\[\e[32m\]
  • ホスト名 → 赤(\[\e[31m\]
  • パス → 青(\[\e[34m\]
  • @:、表示後はデフォルト表示にする → リセット(\[\e[0m\]

時刻入りのプロンプト

PS1="[\A][\[\e[32m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]]$ "

表示例

bashのプロンプトのカスタマイズ例(時刻入り)
  • \A → 現在時刻を24時間表記のHH:MMで表示する。

Gitブランチ入りのプロンプト

PS1='[\[\e[32m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]]\[\e[33m\]$(__git_ps1 " (%s)")\[\e[0m\]$ '

表示例

bashのプロンプトのカスタマイズ例(Gitブランチ入り)

$(__git_ps1 " (%s)")はGitに付属する__git_ps1という関数を呼び出して、現在のGitブランチ名を整形して返す役割を持っています。__git_ps1は次のような特徴を持つ、公式の関数です。

  • Gitパッケージに含まれる
  • git-prompt.shというスクリプトに定義されている
  • PS1の中で安全に実行できるようになっている

補足

もし、__git_ps1: command not foundと表示される場合は、~/.bashrcで次のようにgit-prompt.shを読み込んでください。

if [ -f /etc/bash_completion.d/git-prompt ]; then
    source /etc/bash_completion.d/git-prompt
fi

なお、__git_ps1を定義しているgit-prompt.shの場所は、ディストリビューションによって異なります。代表的には次のようなパスに置かれていることが多いです。

  • /usr/share/git/completion/git-prompt.sh
  • /etc/bash_completion.d/git-prompt

環境によってどちらにあるか違うため、存在確認をしながらsourceするようにしておくと安全です。

bashのプロンプトの環境変数PS1を永続的に設定する方法

これまで紹介した環境変数PS1のカスタマイズは、そのままでは「一時的」な変更にしかなりません。ターミナルを閉じると設定は元に戻ってしまいます。毎回同じプロンプトを使いたい場合は、~/.bashrcに環境変数PS1を書き込んで永続化します。

~/.bashrcを開いて、ファイル末尾にPS1を追加します。例えば、以下のように書いておきます。

export PS1="[\[\e[32m\]\u\[\e[0m\]@\[\e[31m\]\h\[\e[0m\]:\[\e[34m\]\W\[\e[0m\]]$ "

なお、.bashrcを編集しただけでは、設定は反映されないので注意してください。以下のコマンドを実行して.bashrcの設定を反映させる必要があります。

source ~/.bashrc

ターミナルを再起動しても設定は反映されますが、sourceコマンドを使うとすぐに反映できます。

本記事のまとめ

この記事ではbashプロンプトの「色・表示形式の変更方法」と「Gitブランチ表示方法」について説明しました。

この記事で解説した内容を使えば、

  • 見やすい配色にする
  • 時刻やGitブランチを表示する
  • 使いやすいプロンプトを永続設定する

といったことが簡単にできます。自分の作業スタイルに合わせて、ぜひプロンプトをカスタマイズしてみてください!

お読みいただきありがとうございました。

スポンサーリンク