注意:我正在运行Mac OS X Sierra,但这个问题也出现在Ubuntu上。
我已经自定义了终端提示符:
export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m"
请注意,我在最后添加了换行符,因此我开始在>
之后的新行中输入命令。我已经在很多机器上完成了这项工作,而且我注意到每当我添加换行符时,终端都表现得很奇怪。
奇怪的是,我所指的确切行为就是这个(这包括在你使用我提到的PS1
值时复制错误的步骤):
答案 0 :(得分:1)
您的提示中的每个转义序列都必须用 \[
和 \]
括起来告诉bash这些字符应该是为了计算列而被忽略。你的例子中的最后一个没有括号:
export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \e[0m"
即 \e[0m
如果您修复了错误,bash可能会提供更好的结果。这显示了建议的更正;
export PS1="\n\[\033[1;31m\]\u \[\033[1;32m\]@ \[\033[1;32m\]\h \[\033[0;35m\]in \[\033[0;36m\]\w\n\[\033[0;34m\]> \[\033[1;37m\] \[\e[0m\]"