Bash

為什麼瀏覽歷史記錄時我的 bash 提示出現錯誤?

  • July 29, 2017

通常,當我開始查看命令歷史記錄時,顯示的命令中的某些字元不會被刪除,例如:

發生了什麼:

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\] "

引用自:https://unix.stackexchange.com/questions/28827