首頁Shell 提示字元產生器

Shell 提示字元產生器

組出 bash 或 zsh 的提示字元,一段複製

打開你想要的部分,使用者名稱、主機、目前目錄、git 分支、上一個指令的結束碼、Python 虛擬環境,再替每個部分挑一個顏色,提示字元會即時畫出來。產生的內容是一段可以直接貼進 ~/.bashrc 或 ~/.zshrc 的設定。顏色代碼被標記為非列印區段,所以較長的指令列不會在錯誤的位置換行;離開儲存庫時 git 分支會自動消失;結束碼會在提示字元蓋掉它之前先被抓下來。全部在瀏覽器中執行,也不需要登入。

預設組合
預覽
dev@mbp:~/code/bootsignal (main) $ npm run dev
組成部分
樣式
提示符號
產生的提示字元
# BootSignal prompt, add this to ~/.bashrc
bs_git_branch() {
  local b=$(git branch --show-current 2>/dev/null)
  [ -n "$b" ] && printf ' (%s)' "$b"
}
PS1='\[\e[1;32m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]:\[\e[1;34m\]\w\[\e[0m\]\[\e[1;35m\]$(bs_git_branch)\[\e[0m\] \[\e[1m\]\$\[\e[0m\] '

全部在瀏覽器中組合,不會上傳任何內容。可以先貼到 shell 試試看,滿意後再寫進設定檔。

常見問題

這段要放在哪裡?
bash 附加到 ~/.bashrc,zsh 附加到 ~/.zshrc,接著執行 source ~/.bashrc 或開一個新終端機。macOS 上的 bash 通常會讀 ~/.bash_profile。
為什麼顏色代碼要用 \[ \] 包起來?
bash 計算游標位置時會數 PS1 裡的每個字元。顏色代碼不會顯示任何東西,所以必須標記為非列印區段,否則較長的指令列會在錯誤的位置換行並蓋掉提示字元。zsh 用 %F 與 %f,本來就當成零寬度處理。
git 分支為什麼寫成函式?
PS1 本身無法做條件判斷,所以這個輔助函式在儲存庫之外不會輸出任何東西,這樣就不會留下空括號或多餘的分隔符號。分支旁邊不放分隔符號也是同樣的理由。
結束碼為什麼需要 PROMPT_COMMAND?
在 bash 中,提示字元裡的指令替換會先執行,直接讀 $? 拿到的是那次替換的結果。用 PROMPT_COMMAND 先抓一次,才能保留真正的結束碼。zsh 內建 %(?..) 條件跳脫,不需要這個掛鉤。
Family Site