Bash
為什麼瀏覽歷史記錄時我的 bash 提示出現錯誤?
通常,當我開始查看命令歷史記錄時,顯示的命令中的某些字元不會被刪除,例如:
發生了什麼:
prompt$ some_command prompt$ some_commanother_command
應該發生的事情:
prompt$ some_command prompt$ another_command
我無法刪除這些字元,bash 在執行命令時會忽略它們。當顯示新提示時(
Enter
例如按下後),它們也會消失。我詢問了在我的工作場所從事 Linux 工作的其他人,他們說他們有時也會遇到這個問題,但他們不知道如何解決這個問題。
我有 Ubuntu 11.10,我正在使用 guake。這是我的
PS1
:\e[0;31m\u \A ${PWD##*/}\e[0;32m$(parse_git_branch)\e[0;31m$\e[m
parse_git_branch
在哪裡parse_git_branch () { git name-rev HEAD 2> /dev/null | sed 's#HEAD\ \(.*\)# (\1)#' }
據我所知,即使 PS1 不太“花哨”,我的同事也有這個問題。
在 PS1 長度為 0 的部分周圍使用
\[...\]
。它有助於 bash 獲得正確的提示長度。即使採用這種措施,您的命令行在使用多字節字元時也會被破壞(至少我的是這樣)。在這種情況下,點擊Ctrl+L
也有幫助(但同時會清除螢幕)。
您需要確保轉義所有不可列印的字元。
好的
PS1="\[\e[36m\]\W ⇨ \[\e[m\] "
壞的
PS1="\[\e[36m\]\W ⇨ [\e[m\] "