Shell提示自定义和cmd行为

我希望我的提示显示:

  1. 当前(绝对)工作目录,绿色和绿色

  2. 在一个新的线,美元符号和一个空的空间。

我在.profile使用这一行

export PS1='\e[0;32m$(pwd)\n\e[m$ '

因此,当在例如Desktop ,我的提示如下所示:

但是,有时当按下向上箭头重新运行以前的命令时,在提示开始时会出现一个随机字符序列,除非我按Enter键,否则它似乎不会消失,例如

我从来没有点过cd cd Desktop命令。 最奇怪的部分是退格甚至不会删除上面两个cd命令中的第一个!

有什么建议?

您必须确保提示中的非打印字符位于转义方括号中,否则bash无法正确计算提示的大小。 我想我已经为你修好了:

 PS1='\[\e[0;32m\]$PWD\n\[\e[m\]$ ' 

首先要非常感谢@Zanna指出正确的方法来解决这个问题。

为了更完整的答案,我扩展了解决方案,包括:

a)绿色的cwd

b)在新行中,git分支(如果有的话)呈黄色,如果分支是脏的则带有红色星形

要完成b,需要git感知提示

它就像~/.bashrc的最后一行一样

 export PS1='\[\e[0;32m\]$PWD\n\[\e[m\]\[\e[0;33m\]$git_branch\[\e[m\]\[$txtred\]$git_dirty\[$txtrst\]$ ' 

如果你在git分支上,现在希望扩展到这样的提示

在此处输入图像描述