Shell 提示符自定义和 cmd 行为

Shell 提示符自定义和 cmd 行为

我希望我的提示显示:

  1. 当前(绝对)工作目录,以绿色显示,

  2. 在新行中,美元符号和空格。

我正在使用这条线.profile

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

因此,当在例如时Desktop,我的提示看起来像这样:

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

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

有什么建议么?

答案1

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

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

答案2

首先非常感谢@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 分支上,提示符现在有望扩展为类似这样的内容

在此处输入图片描述

相关内容