我有一个自定义的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