![为什么当我浏览历史记录时,我的 bash 提示符会出现问题?](https://linux22.com/image/20309/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E6%88%91%E6%B5%8F%E8%A7%88%E5%8E%86%E5%8F%B2%E8%AE%B0%E5%BD%95%E6%97%B6%EF%BC%8C%E6%88%91%E7%9A%84%20bash%20%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%BC%9A%E5%87%BA%E7%8E%B0%E9%97%AE%E9%A2%98%EF%BC%9F%20.png)
通常,当我开始查看命令历史记录时,显示的命令中的某些字符不会被删除,例如:
发生了什么:
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 不太“花哨”,我的同事也会遇到这个问题。
答案1
在 PS1 长度为 0 的部分周围使用\[...\]
。它有助于 bash 获得正确的提示长度。即使采用这种措施,当使用多字节字符时,您的命令行也可能会被破坏(至少我的是这样)。在这种情况下,点击Ctrl+L也有帮助(但同时会清除屏幕)。
答案2
您需要确保转义所有不可打印的字符。
好的
PS1="\[\e[36m\]\W ⇨ \[\e[m\] "
坏的
PS1="\[\e[36m\]\W ⇨ [\e[m\] "