【Linux (Unix系)】Bashプロンプトのカスタマイズ(gitブランチ表示や色分け 等)

Git

初めに

職業柄、よく Linux環境をセットアップするので、
表題に記載の通り Bashプロンプトのカスタマイズ設定を紹介しようと思います。

設定値(定義)

私の環境における色付けをキャプチャにて添付したいのですが、
ユーザー名とホスト名を公開できないので、、頑張って想像してみてください。


if [ -f /path/to/git-completion.bash ]; then
    source /path/to/git-completion.bash
fi

if [ -f /path/to/git-prompt.sh ]; then
    source /path/to/git-prompt.sh
fi

GIT_PS1_SHOWDIRTYSTATE=true

export PS1='\[\033[01;33m\]\u\[\033[01;35m\]@\[\033[01;33m\]\h\[\033[01;35m\]: \[\033[01;35m\]\w \[\033[01;31m\]$(__git_ps1 "(%s)") \n\[\033[01;34m\]\$\[\033[00m\] '

---
username@hostname: ~ 
$ 

2.1. 各定義説明

if [ -f /path/to/git-completion.bash ]; then
    source /path/to/git-completion.bash
fi
  • (1行目) if [ -f /path/to/git-completion.bash ]; then
    • /path/to/git-completion.bashの存在確認(存在していれば真(true))
  • (2行目) source /path/to/git-completion.bash
    • /path/to/git-completion.bashを実行
      • Gitコマンド補完を提供するスクリプトです。
        • $ git cまで入力して tabキーを押下すると $ git commitまで自動入力してくれる機能
  • (3行目) fi
    • 条件分岐の終了定義

if [ -f /path/to/git-prompt.sh ]; then
    source /path/to/git-prompt.sh
fi
  • (1行目) if [ -f /path/to/git-prompt.sh ]; then
    • /path/to/git-prompt.shの存在確認(存在していれば真(true))
  • (2行目) source /path/to/git-prompt.sh
    • /path/to/git-prompt.shを実行
      • 現在の Gitリポジトリの情報(ブランチ名やステータスなど)を組み込むためのスクリプトです。
        現在の作業ディレクトリが Gitリポジトリ内にある場合に、プロンプトがその状態を反映してくれるようになります。
        • 具体的に表示できる情報
          • 現在のブランチ名
            • 例: main, feature-branch など、現在チェックアウトしている Gitのブランチ名が表示されます。
          • リポジトリの状態
            • *:ワーキングツリーに未コミットの変更がある場合(例: ファイルが変更されたがまだステージングされていない)
            • +:ステージングエリアに変更がある場合(例: $ git add されたがまだコミットされていないファイル)
            • %:マージ作業が進行中の場合(コンフリクトが解決されていないなど)
          • デタッチドヘッド状態
            • ブランチに紐付いていない特定のコミットやタグをチェックアウトしている場合に、デタッチドヘッド状態として表示されます。
          • rebaseやcherry-pickの進行状況
            • リベース、チェリーピック、マージの進行中であれば、それに対応する状態を表示できます。
  • (3行目) fi
    • 条件分岐の終了定義

実行される/path/to/git-prompt.shは、後に使用される__git_ps1という関数がこの中に入っています。


GIT_PS1_SHOWDIRTYSTATE=true

本処理は、Gitの状態表示オプションをONにします。
trueを設定することで、変更があるかどうかもプロンプトに表示されるようにします。
具体的にはブランチ名の横に、+(ステージされた変更) や *(ステージされていない変更)が表示されます。


export PS1='\[\033[01;33m\]\u\[\033[01;35m\]@\[\033[01;33m\]\h\[\033[01;35m\]: \[\033[01;35m\]\w \[\033[01;31m\]$(__git_ps1 "(%s)") \n\[\033[01;34m\]\$\[\033[00m\] '

PS1変数を定義しています。(PS1変数は、bashプロンプトの文字列変数です。)
本設定は、私が個人的に好きな配色を設定しているのでとても長いですが、ほとんど配色設定です。
部分ごとに説明します。

  • \[\033[01;33m\]\u
    • 黄色でユーザー名 (\u)
  • \[\033[01;35m\]@
    • 紫色で @
  • \[\033[01;33m\]\h
    • 黄色でホスト名 (\h)
  • \[\033[01;35m\]:
    • 紫色でコロン :
  • \[\033[01;35m\]\w
    • 紫色でカレントディレクトリ (\w)
  • \[\033[01;31m\]$(__git_ps1 "(%s)")
    • 赤色で Gitのブランチ名
      • (__git_ps1 "(%s)") という書き方で、今いる Gitブランチ名を表示
  • \n
    • 改行(プロンプトが2行になります)
  • \[\033[01;34m\]\$
    • 青色でプロンプト記号(通常は $、rootなら #
  • \[\033[00m\]
    • 色をリセット(標準色に戻す)

以上、私の環境で定義しているしている設置値を紹介しました。

2.2. Bashプロンプトでの色付けルール

ANSIエスケープコードを使用することで、文字の色や背景色、スタイルを設定することができます。
ANSIエスケープシーケンスの形式は、\[\033[属性;色m\]です。

属性(文字のスタイル)説明
0(または 00)リセット(通常の状態)
1太字(明るい色として表示される場合もあります)
4下線
色コード(テキストの色)説明
30黒色
31赤色
32緑色
33黄色
34青色
35紫色
36水色
37白色
背景色説明
40黒色
41赤色
42緑色
43黄色
44青色
45紫色
46水色
47白色

幾つか、例を紹介します。

  • 赤色の文字
    • \[\033[31m\]
  • 赤色の太文字
    • \[\033[01;31m\]
  • 色をリセット(通常の配色 (灰色))
    • \[\033[00m\]

2.3. 特殊なシーケンス

シーケンス意味出力例
\u現在のユーザー名username
\hホスト名(短縮形)hostname
\H完全なホスト名hostname.local
\w現在の作業ディレクトリ(HOME~で省略)/home/username~/dir
\W現在のディレクトリ名(末尾の部分のみ)dir
\t現在の時刻(24時間表記)13:15:22
\d現在の日時(形式:曜日 月 日)Sat Apr 26
\n改行改行
\$プロンプト文字(通常ユーザーは $、rootは #$または #

幾つか、例を紹介します。

export PS1='[\033[01;32m]\u@\h:\w\$ \[\033[00m\]\n'
 ↓
<ユーザー名>@<ホスト名>:~/<ディレクトリ名>
$
 ↓
username@hostname:~/directory
$
export PS1='\[\033[01;33m\]\t \[\033[01;32m\]\u@\h \[\033[01;34m\]\w\$ \[\033[00m\]'
 ↓
<日時> <ユーザー名>@<ホスト名> ~/<ディレクトリ名>$
 ↓
13:15:22 username@hostname ~/directory$

最後に

以上です。

comment 📝

タイトルとURLをコピーしました