如何修复我的终端提示被字符退出的问题?

如何修复我的终端提示被字符退出的问题?

我的终端提示符是使用文件中的以下配置设置的.profile

# Prompt
GREEN=$(tput setaf 2)
LIME_YELLOW=$(tput setaf 190)
MAGENTA=$(tput setaf 5)
WHITE=$(tput setaf 7)
NORMAL=$(tput sgr0)
PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}@${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

一般来说,它工作得很好,但有时我会遇到一个相差一的错误。运行几个命令然后使用up密钥访问历史记录后,某些字符似乎出现乱码。例如:

matt@laptop ~ $ git log

变成

matt@laptop ~ $ gitlog

或者:

matt@laptop ~ $ ssh desktop

变成

matt@laptop ~ $ssh desktop

显示不正确的命令正常执行,并且也正常出现在历史记录中。

答案1

\[和标记\]用于围绕在屏幕上显示时占据零宽度的文本,例如设置颜色的控制序列。和任何其他普通文本@应位于标记之外。

所以而不是

PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}@${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

用这个

PS1="\[${WHITE}${MAGENTA}\]\u\[${WHITE}\]@\[${GREEN}\]\h \[${LIME_YELLOW}\]\W \[${WHITE}${NORMAL}\]$ "

更多信息请访问Bash 常见问题解答 053

相关内容