我的系统已在文本模式(无 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