我有以下作为我的PS1设置我的bash提示符。但当我键入非常长的命令到终端,行不 Package 好(它继续从同一行,而不是开始一个新的行)。
BROWN='\[\e[38;5;5m\]'
ARROW=$'\xe2\x86\x92'
RESET='\[\e[m\]'
export PS1="[\u@\h \w] $BROWN$ARROW $RESET"
我想在这种风格的代码,因为在未来我可能会有更多的颜色和符号更有趣和复杂的提示,所以使用变量是我的首选方式。
但是即使我用最直接的方式(没有变量)编写PS1如下,换行仍然是错误的。
export PS1="[\u@\h \w] \[\e[38;5;5m\]→ \[\e[m\]"
我认为问题应该来自于使用unicode字符,因为如果我设置PS1时没有使用unicode字符,如下所示(用$
替换unicode箭头字符),根本就没有 Package 问题。
export PS1="[\u@\h \w] \[\e[38;5;5m\]\$ \[\e[m\]"
要了解更多信息,我的bash版本是4.2.46(x86_64-redhat-linux-gnu),终端可以很好地呈现我想要使用的unicode字符(使用echo -e '\xe2\x86\x92'
)。
提前感谢您的帮助!
1条答案
按热度按时间dldeef671#
对于UTF-8语言环境,Bash将
$'\xe2\x86\x92'
作为一个字符处理,长度为1。对于C语言环境,它是3个字符的字符串,长度为3(这会使Bash混淆它应该将光标向前移动多远)。我建议您使用UTF-8语言环境。请参见以下示例: