預設 Bash 提示符(PS1)常顯示完整絕對路徑,深層目錄下提示符佔滿整行,嚴重影響可讀性。本文詳細說明如何修改 PS1 環境變數,實現「僅顯示當前目錄名」、加入 Git 分支、顏色區分 root/一般使用者、命令執行時間等進階定製,並解釋常見逸出序列含義。
| 序列 | 含義 | 範例輸出 |
|---|---|---|
\u | 當前使用者名稱 | admin |
\h | 主機名(第一個 . 前) | web01 |
\H | 完整主機名 | web01.example.com |
\w | 完整工作目錄路徑(~ 代表 $HOME) | ~/projects/app/src |
\W | 工作目錄基礎名稱(最後一級) | src |
\$ | 提示符號(root 為 #,一般用戶為 $) | $ / # |
\[...\] | 非顯示字元標記(用於 ANSI 顏色碼,避免行寬計算錯誤) | - |
vim ~/.bashrc(使用者層級)或 /etc/bash.bashrc(全域)。if [ "$color_prompt" = yes ]; then ... fi 附近。\w 為 \W: 將完整路徑改為僅顯示當前目錄名。# 修改前
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
fi
# 修改後:將兩處 \w 改為 \W
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\W\$ '
fi
source ~/.bashrc
# 或重新開啟終端機
# 修改前(深層目錄)
admin@web01:~/projects/app/src/modules/auth/controller$
# 修改後
admin@web01:controller$
# ~/.bashrc 末尾加入
source /usr/share/git/completion/git-prompt.sh # 路徑視發行版而定
export GIT_PS1_SHOWDIRTYSTATE=1
export GIT_PS1_SHOWSTASHSTATE=1
export GIT_PS1_SHOWUNTRACKEDFILES=1
export GIT_PS1_SHOWUPSTREAM="auto"
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[01;33m\]$(__git_ps1 " (%s)")\[\033[00m\]\$ '
效果:admin@web01:controller (main *%)$(*=未暫存、%=未推送)
# 需搭配 PROMPT_COMMAND 或 PS0/PS1 陷阱
# 簡易版:顯示退出碼(非零時紅色)
PS1='$(if [ $? -eq 0 ]; then echo "\[\033[01;32m\]✓"; else echo "\[\033[01;31m\]✗ $?"; fi) \[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
if [ "$(id -u)" -eq 0 ]; then
PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]# '
else
PS1='\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
fi
PS1='\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\n\[\033[01;33m\]\$\[\033[00m\] '
效果:
admin@web01 ~/projects/app/src
$
~/.zshrc 中 PROMPT 變數,或切換主題 ZSH_THEME="agnoster"/"powerlevel10k" 內建精美提示符。fish_prompt 函數,執行 funced fish_prompt 編輯,或安裝 tide、starship 跨 Shell 提示符引擎。~/.bashrc 而非 ~/.bash_profile,且已 source ~/.bashrc;檢查是否有後續程式碼覆蓋 PS1。\[...\] 中,否則 Bash 計算行寬錯誤導致換行混亂。~/.bashrc 有 force_color_prompt=yes 或終端機支援 256 色(TERM=xterm-256color)。將 PS1 中的 \w 改為 \W 是最直接的「縮短路徑」方案;搭配顏色、Git 狀態、退出碼、多行佈局,可打造資訊密度高且視覺清晰的專業提示符。建議將個人化 PS1 納入 Dotfiles 版控(GitHub/GitLab),新機器一鍵部署,保持跨環境一致體驗。

Linux 磁碟空間清理實戰指南:find 尋找大檔/空檔/舊檔、rpm 套件管理、inode 監控、du 目錄分析完整工具箱
Linux 編譯安裝 MemcacheQ 訊息佇列服務:BerkeleyDB 與 Libevent 依賴完整處理
Linux 用 psensor 監控 CPU/顯卡/硬碟溫度:lm-sensors + hddtemp + 圖形化前端完整部署
Linux NBMA 與 BMA 網路交換模式深度對比:幀中繼/ATM vs 乙太網交換機學習機制
Linux eCryptFS 文件加密實戰:從安裝到掛載的完整指南
Linux 使用 cgroups 管理 CPU 資源完整指南