默認的 Bash 提示符(PS1)顏色單調,長時間操作易視覺疲勞。通過修改 ~/.bashrc 中的 PS1 變量,利用 ANSI 轉義序列可實現用戶名、主機名、路徑、Git 分支等元素的豐富著色。本文以「用戶名紅色高亮」為例,提供完整配置模板與原理解析。
| 轉義序列 | 效果 | 示例 |
|---|---|---|
\e[0m 或 \e[39;49m | 重置所有屬性 | 結束著色 |
\e[1m | 粗體/高亮 | \e[1mBold\e[0m |
\e[31m | 前景紅色 | \e[31mRed\e[0m |
\e[32m | 前景綠色 | \e[32mGreen\e[0m |
\e[34m | 前景藍色 | \e[34mBlue\e[0m |
\e[41m | 背景紅色 | \e[41mBgRed\e[0m |
在 PS1 中需用 \[ \] 包裹非打印字符序列,防止行寬計算錯誤導致命令行換行混亂。
cp ~/.bashrc ~/.bashrc.bak
gedit ~/.bashrc # 或 vim/nano
在文件中搜索 PS1=,通常位於 if [ "$color_prompt" = yes ]; then 邏輯塊內。將整個 if-else-fi 區塊替換為以下統一彩色定義:
# 強制啟用彩色提示符
force_color_prompt=yes
# 統一 PS1 定義(用戶名紅色粗體,主機名綠色,路徑藍色,$ 白色)
PS1='\[\e[1;31m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
# 解析:
# \[\e[1;31m\] -> 開啟 粗體+紅色
# \u -> 用戶名
# \[\e[0m\] -> 重置
# @ -> 字面符號 @
# \[\e[1;32m\] -> 開啟 粗體+綠色
# \h -> 主機名 (短)
# \[\e[0m\] -> 重置
# : -> 字面符號 :
# \[\e[1;34m\] -> 開啟 粗體+藍色
# \w -> 當前工作目錄 (完整路徑,~ 縮寫)
# \[\e[0m\] -> 重置
# \$ -> 提示符 (# 為 root, $ 為普通用戶)
# 空格 -> 美觀分隔
# 下載 git-prompt.sh (通常系統已自帶 /usr/lib/git-core/git-sh-prompt)
source /usr/lib/git-core/git-sh-prompt # 或 /etc/bash_completion.d/git-prompt
# 設置顯示風格
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
# 含 Git 分支的 PS1 (分支名黃色)
PS1='\[\e[1;31m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\[\e[1;33m\]$(__git_ps1 " (%s)")\[\e[0m\]\$ '
為避免誤操作,建議 Root 提示符顯著不同(如紅色背景):
# 在 /root/.bashrc 中添加
if [[ $EUID -eq 0 ]]; then
PS1='\[\e[1;37;41m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
# 用戶名白字紅背,極度醒目
fi
source ~/.bashrc
# 或重新打開終端
效果預覽:
user@hostname:~/projects$
| 現象 | 原因 | 解決 |
|---|---|---|
提示符顯示亂碼如 \[\e[1;31m\] | 未用 \[ \] 包裹非打印序列 | 檢查 PS1 中每個轉義序列均被 \[ \] 包圍 |
| 修改後無效果 | 編輯錯誤文件、或被後續腳本覆蓋 | 確認編輯 ~/.bashrc,檢查 ~/.bash_profile、/etc/bash.bashrc 是否覆蓋 |
| 命令行換行錯位 | 非打印字符未正確標記導致寬度計算錯 | 嚴格使用 \[ \],避免在序列外放入可見字符 |



#!/bin/bash
# deploy_red_prompt.sh
cat >> ~/.bashrc << 'EOF'
# === Custom Red Username Prompt ===
force_color_prompt=yes
PS1='\[\e[1;31m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\$ '
EOF
source ~/.bashrc
echo "Red username prompt deployed. Open new terminal to see effect."
執行:bash deploy_red_prompt.sh
~/.bashrc (交互式非登錄 Shell 讀取)。PS1,使用 \[ANSI_CODE\] 包裹顏色代碼。\[\e[1;31m\]\u\[\e[0m\]。source ~/.bashrc。三分鐘配置,終身受益的視覺區分度,讓每一次敲擊鍵盤都清晰可辨。