這個 bash 提示有什麼問題嗎?

這個 bash 提示有什麼問題嗎?

我使用文件中的以下條目~/.bashrc對提示進行著色並顯示 git 存儲庫的當前分支:

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

這幾乎可以正常工作,除了當我使用 bash 歷史記錄(幾次向上箭頭鍵)時,命令列變得“縮進”(只有提示符的第一個字元保持不變),可見的是:

usemmand

當我的用戶名是user並且命令是command.

答案1

\[並且\]只能在命令提示字元的部分周圍使用不要儘管有實際文本,但仍使遊標前進。如果__git_ps1產生任何可見的輸出,那麼這將使您的命令列不同步。

答案2

這是正確的版本:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

答案3

任何處理此問題的人,這裡是對我有用的範例:

前:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

後:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

記下所有'\\[\\]'周圍的顏色。

相關內容