初めに
職業柄、よく 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
まで自動入力してくれる機能
- Gitコマンド補完を提供するスクリプトです。
- (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の進行状況
- リベース、チェリーピック、マージの進行中であれば、それに対応する状態を表示できます。
- 現在のブランチ名
- 具体的に表示できる情報
- 現在の Gitリポジトリの情報(ブランチ名やステータスなど)を組み込むためのスクリプトです。
- (3行目)
fi
- 条件分岐の終了定義
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ブランチ名を表示
- 赤色で 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 📝