我的终端提示符是使用文件中的以下配置设置的.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。