命令提示符已被先前的命令覆盖!

命令提示符已被先前的命令覆盖!

我的系统已在文本模式(无 X-Window)中安装了 Ubuntu Server 12.04,并且在我的~/.bashrc文件中通过以下行定义了命令提示符:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w \[\033[01;35m\] \[$(date "+%a %F %T %Z")\] \[\033[00m\]\$ '  

看起来像:

username@hostname:~  Wed Jul 2015-07-22 18:00:12 JST $ 

如果我按下历史记录中的上一个命令,则会显示在上面的提示符前面,例如:

username@hostname:~  Wed Jul 2015-07-22 18:00:12 JST $ vim /home/username/~/.bshrc

如果我第二次按,则会显示历史记录中的前一个命令,但它会覆盖我的提示的某些部分,即:

username@hostname:~  Wedsudo su

注意,Jul 2015-07-22 18:00:12 JST $已经写完了!

  • 此外,历史记录中的第二条命令并不总是会覆盖它。有时,第一条、第二条、第三条命令会接连正确地显示在完整提示符前面,然后突然第四条命令会覆盖在命令提示符的最后一部分!

  • 总是,命令提示符的最后一部分被覆盖星期几,即如果我按下或,Wed这个位置就是固定的。

  • 如果我运行该命令或按Ctrl+ C,命令提示符将再次完整显示。

有人可以帮忙解决这个问题吗?

答案1

失败是因为您将和括$(date ...)在内。删除它们,它应该可以按预期工作。\[\]

\[ ... \]提示符中的 用来告诉 bash 提示符中的字符不会增加提示符的长度。在终端转义符附近需要用到它,\033[01;32m因为它只会使后面的文本变成不同的颜色,但这 8 个字节不会增加提示符的长度;它们会被终端吃掉。

附注:bash 已经可以在提示中输入日期,而无需运行命令date

PS1='... \D{%a %F %T %Z} ...'

http://www.gnu.org/software/bash/manual/bash.html#Controlling-the-Prompt

相关内容