Bash自定义提示符打破长命令行的包装

我有一个自定义的bash提示,为我的用户名,主机名和当前工作目录着色。 颜色显示正确,但是当我input一个需要换行的命令行时,terminal不会启动一个新行,并在我的命令的开头写入。 这发生在RHEL 4和Debian上。

这个问题在OS X上详述了类似的问题; 这似乎是一个问题,不正确地终止控制序列,但我不明白是什么原因造成这一点,因为我使用$(tput)代码无处不在,而不是手工编写我的代码。 下面的代码片段 – 是否有人能够build议我做错了什么?

# Control codes COL_RST=$(tput sgr0) # Remove all colour formatting COL_BRIGHT=$(tput bold) # Emphasise # Foreground COL_G=$(tput setaf 2) # Green COL_Y=$(tput setaf 3) # Yello COL_B=$(tput setaf 4) # Blue COL_USR=${COL_Y}${COL_BRIGHT} COL_PWD=${COL_B}${COL_BRIGHT} COL_HST=${COL_G}${COL_BRIGHT} # Set prompt PROMPT="${COL_USR}\u${COL_RST}@${COL_HST}\h${COL_RST}:${COL_PWD}\W${COL_RST}" # Put it all together.... PS1="[$PROMPT]\$ " export PS1 

将每个颜色variables包裹在方括号中:

 \[${COL_USR}\] 

要么

 COL_USR="\[${COL_Y}${COL_BRIGHT}\]" 

这告诉Bash这些被认为是零宽度。

这与您所链接的问题完全相同。 如果您执行以下命令,则会看到您的variables包含与“手工”类似的字符序列。 使用tput只能将事物移植到多个$TERMtypes,不会影响代码序列的长度。 正是这个长度是扔掉的东西。

 echo ${COL_USR} | hexdump -c