我有一个自定义 bash 配置,我安装在许多不同的机器上,其中包括一个自定义 $PS1,它由脚本生成,结果如下:
\[\e[0;33m\][\!] $(if [[ $? == 0 ]]; then echo "\[\e[0;32m\]✓"; else echo "\[\e[0;31m\]✗"; fi) \[\e[1;33m\]\u\[\e[1;36m\]@\h \[\e[1;32m\]\w \[\e[1;32m\]\$\[\e[00m\]
这有点难看,但似乎问题仅由 ✓ 和 ✗ 字符引起;事实上,用 o 和 n 替换它们可以解决问题,并使
PS1='✓'
仍然受苦。
问题是当我输入一个足够长的命令以达到终端的限制时,而不是继续下一行,它会与提示符和命令的开头重叠。有趣的是,如果它只在第一次重叠,那么它通常会在下一行继续。
发生这种情况的机器是一个全新的 Debian 8 Jessie 虚拟机,它是在运行 Xen4.4 的 Debian 8 Hypervisor 上制作的,带有 xl 工具栈。我制作了其他几个相同的虚拟机并得到了相同的结果。但是,在我尝试过的任何物理 Debian 机器(包括我的 Dom0)上都没有这个问题。我还在 Ubuntu15.04 VM 上进行了尝试,它也没有遇到问题。
我还注意到这个问题发生在 ssh 连接和串行控制台上。
有人知道发生了什么吗?