最可能的原因是格式不正确的PS1
提示字符串。当您将非打印控制字符放在提示符中时,您必须将它们括起来\[ … \]
以告诉 Bash 在计算提示符宽度时不要计算它们。
如果宽度计算不正确,命令行显示可能会以多种方式混乱,包括您描述的方式。
你在评论中写道:
这是我的 .bash_profile export PATH=${PATH}:/Users/offirgolan/android-sdk-macosx/platform-tools export TERM="xterm-color" alias ls="ls -G" export PS1="\e[ 1;30m][\e[\e[1;30m]\e[1;33m] \u@\H [\e[1;32m]\w[\e[0m] \e[1;30m] ]\n[[ \e[1;31m]\T[\e[0m]\e[1;30m] ] > \e[37m]"
看起来您可能打算包含括号,因为所有额外的括号都没有前导反斜杠,但它们不一致,您的字符串甚至包含不完整的转义序列,例如\e[\e[
. 很难说出您打算在提示中显示哪些括号(如果有的话),以及您想要它们的颜色,但您PS1
应该更像
PS1='\[\e[1;30m\][\[\e[1;30m\e[1;33m\] \u@\H [\[\e[1;32m\] \w\[\e[0m \e[1;30m\]]\n[ \[\e[1;31m\]\T\[\e[0m\e[1;30m\] ] > \[\e[37m\]'
专业提示:不要在提示符中对终端命令进行硬编码——它们不可移植,并且不适用于所有终端。相反,使用tput
为当前终端选择适当的命令序列。例如
PS1="\[$(tput setaf 1)\]Red Text\[$(tput sgr0)\] \$ "
将显示提示“Red Text $”,其中“Red Text”为红色。这也使查看\[ \]
括号是否正确变得更加容易,因为您没有乱扔字符串的文字转义字符,并且助记符tput
可以更容易地找出正在发送的命令。