Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

自訂 Linux 終端機提示符:縮短路徑顯示、顏色與資訊豐富化

編輯:關於 Linux

預設 Bash 提示符(PS1)常顯示完整絕對路徑,深層目錄下提示符佔滿整行,嚴重影響可讀性。本文詳細說明如何修改 PS1 環境變數,實現「僅顯示當前目錄名」、加入 Git 分支、顏色區分 root/一般使用者、命令執行時間等進階定製,並解釋常見逸出序列含義。

核心變數:PS1 與關鍵逸出序列

序列 含義 範例輸出
\u當前使用者名稱admin
\h主機名(第一個 . 前)web01
\H完整主機名web01.example.com
\w完整工作目錄路徑(~ 代表 $HOME)~/projects/app/src
\W工作目錄基礎名稱(最後一級)src
\$提示符號(root 為 #,一般用戶為 $)$ / #
\[...\]非顯示字元標記(用於 ANSI 顏色碼,避免行寬計算錯誤)-

修改步驟

  1. 編輯設定檔: vim ~/.bashrc(使用者層級)或 /etc/bash.bashrc(全域)。
  2. 尋找 PS1 定義區塊: 通常在 if [ "$color_prompt" = yes ]; then ... fi 附近。
  3. 修改 \w 為 \W: 將完整路徑改為僅顯示當前目錄名。

範例:預設 Debian/Ubuntu 彩色提示符修改

# 修改前
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$

進階定製:打造專業級提示符

1. 加入 Git 分支與狀態(需安裝 git-prompt.sh)

# ~/.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 *%)$(*=未暫存、%=未推送)

2. 顯示上一條命令退出碼與耗時

# 需搭配 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\]\$ '

3. 區分 root 與一般使用者顏色

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

4. 多行提示符(資訊豐富不擁擠)

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
$

Zsh/Fish 使用者快速指引

  • Zsh (Oh My Zsh): 修改 ~/.zshrc 中 PROMPT 變數,或切換主題 ZSH_THEME="agnoster"/"powerlevel10k" 內建精美提示符。
  • Fish: 內建 fish_prompt 函數,執行 funced fish_prompt 編輯,或安裝 tide、starship 跨 Shell 提示符引擎。

常見問題排查

  1. 修改無效: 確認編輯的是 ~/.bashrc 而非 ~/.bash_profile,且已 source ~/.bashrc;檢查是否有後續程式碼覆蓋 PS1。
  2. 顏色亂碼/游標錯位: 所有 ANSI 顏色碼必須包裹在 \[...\] 中,否則 Bash 計算行寬錯誤導致換行混亂。
  3. SSH 遠端無顏色: 確認遠端 ~/.bashrc 有 force_color_prompt=yes 或終端機支援 256 色(TERM=xterm-256color)。

結語

將 PS1 中的 \w 改為 \W 是最直接的「縮短路徑」方案;搭配顏色、Git 狀態、退出碼、多行佈局,可打造資訊密度高且視覺清晰的專業提示符。建議將個人化 PS1 納入 Dotfiles 版控(GitHub/GitLab),新機器一鍵部署,保持跨環境一致體驗。

Bash PS1 修改前後對比圖

Copyright © Windows教程網 All Rights Reserved