PHP*_*ner 2 command-line bash prompt text-mode
我的系统在文本模式(无 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\]\$ '
Run Code Online (Sandbox Code Playgroud)
看起来像:
username@hostname:~ Wed Jul 2015-07-22 18:00:12 JST $
Run Code Online (Sandbox Code Playgroud)
如果我按下 ↑ 历史记录中的上一个命令,它会显示在上面的提示前面,例如:
username@hostname:~ Wed Jul 2015-07-22 18:00:12 JST $ vim /home/username/~/.bshrc
Run Code Online (Sandbox Code Playgroud)
如果我 ↑ 第二次按,历史记录中的上一个命令会显示,但它在我的提示的某些部分被覆盖,即:
username@hostname:~ Wedsudo su
Run Code Online (Sandbox Code Playgroud)
注意Jul 2015-07-22 18:00:12 JST $写完了!
此外,它并不总是被历史记录中的第二个命令覆盖。有一段时间,第一条,第二条,第三条前面的命令在完整提示前正确显示,一个接一个,突然前面的命令被覆盖在命令提示符的最后一部分!
总是,命令提示符的最后一部分在星期几之后被覆盖,即Wed如果我按↑或,这个位置是固定的↓。
如果我运行命令或按Ctrl+ C,命令提示符将再次完全显示。
任何人都可以帮助解决这个问题?
那失败了,因为你包含$(date ...)在\[and 中\]。删除那些,它应该按预期工作。
\[ ... \], 在提示中,用于告诉 bash 中的字符不会增加提示的长度。您需要这样的终端转义,\033[01;32m因为这只会使以下文本具有不同的颜色,但是这 8 个字节不会增加提示的长度;他们反而被终端吃掉了。
附带说明;bash 已经可以将日期放在提示中,而无需运行date命令。
PS1='... \D{%a %F %T %Z} ...'
Run Code Online (Sandbox Code Playgroud)
请参阅http://www.gnu.org/software/bash/manual/bash.html#Controlling-the-Prompt