Linux Bashプロンプトの色をカスタマイズする方法

Linuxのターミナルで表示されるコマンドプロンプト(例:user@host:~/path$)の色を変更するには、PS1環境変数をANSIエスケープシーケンスで修飾します。この設定は通常~/.bashrcファイルに記述され、シェル起動時に読み込まれます。

1. PS1の構成と色指定の基本

PS1はプロンプトのフォーマット文字列であり、以下の要素を含めることができます:

  • \u:現在のユーザー名
  • \h:ホスト名(ドメインなし)
  • \w:カレントディレクトリの絶対パス(例:/home/user/project
  • \W:カレントディレクトリのbasename(例:project
  • \$:一般ユーザーは$、rootは#

各要素の色は\[\033[属性;色コードm\]で囲み、終了は\[\033[0m\]でリセットします。\[\]は非表示文字であることをシェルに通知し、カーソル位置計算の誤りを防ぎます。

2. 実用的なカラーテーマ例

以下は、.bashrcに直接追加可能な4つの異なるテーマです。すべてsource ~/.bashrcで即時反映されます。

テーマA:モダンブルー(青系)

PS1='\[\033[0;36m\]\u\[\033[0;37m\]@\[\033[0;34m\]\h\[\033[00m\]:\[\033[1;34m\]\w\[\033[00m\]\$ '

テーマB:ハイコントラストグリーン

PS1='\[\033[1;32m\]\u\[\033[1;37m\]@\[\033[1;36m\]\h\[\033[00m\]:\[\033[1;34m\]\w\[\033[00m\]\$ '

テーマC:パステルパープル

PS1='${debian_chroot:+($debian_chroot)}\[\033[0;35m\]\u\[\033[1;37m\]@\[\033[0;36m\]\h\[\033[00m\]\[\033[0;33m\]:\w\[\033[00m\]\[\033[1;37m\]$ \[\033[00m\]'

テーマD:ライトモード(白地に明るい文字)

PS1='\[\033[0;95m\]\u\[\033[0;97m\]@\[\033[0;94m\]\h\[\033[00m\]:\[\033[0;92m\]\w\[\033[00m\]\$ '

3. 色コード一覧(前景色)

コード備考
0;30暗め
0;31
0;32
0;33
0;34
0;35マゼンタ
0;36シアン
0;37ライトグレー
1;31明るい赤太字相当
1;37
0;97純白高輝度

背景色は4047(標準)、100107(高輝度)で指定可能です。例:\033[44m=青背景。

4. 設定の永続化とロード順序

多くの端末エミュレータ(MobaXterm、GNOME Terminalなど)は「ログインシェル」ではなく「インタラクティブ非ログインシェル」を起動するため、.bash_profileではなく.bashrcが自動読み込みされません。これを解消するには、~/.bash_profileに以下を追加します:

if [ -f ~/.bashrc ]; then
  source ~/.bashrc
fi

また、.bashrc内では必ずdircolorsls --color=autoの設定を含めておくと、ファイル一覧表示もカラフルになります:

if command -v dircolors >/dev/null 2>&1; then
  [[ -f ~/.dircolors ]] && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
  alias ls='ls --color=auto'
  alias grep='grep --color=auto'
fi

5. カラー設定の検証とデバッグ

設定後にプロンプトが正しく表示されない場合は、次の手順で確認してください:

  1. echo $PS1で現在の値を出力
  2. set -xでシェルの実行トレースを有効化
  3. 不正なエスケープ文字がないかcat -A ~/.bashrcで確認
  4. resetコマンドで端末状態を初期化

さらに高度なカスタマイズが必要な場合、zshへの移行やoh-my-zshなどのフレームワーク利用も検討できます。

タグ: bash ansi-escape shell-customization linux-terminal ps1

5月15日 00:06 投稿