我正在编写一个打印彩色线条的程序,我做的越多,我就越发现自己能够解决出现的换行问题。
它是一种用 php 编写的终端,提示符如下:
$return = readline("\033[44m\033[1;37m{$this->text}>>\033[0m ");
如果我滚动浏览历史记录,我的文本会丢失 10 个字符,如果我输入 21 个字符并删除一个字符,它会清除整行并开始删除上一行的字符。这是在 47 列宽的控制台上
如果我尝试添加转义符
$return = readline("\[\033[44m\033[1;37m\]{$this->text}>>\[\033[0m\] ");
然后它会打印括号...即使我添加双反斜杠。
\[\][timer]>>\[\]
我发现了同样的事情echo -e
,我真的不知道发生了什么。
最后,如果我修改 PS1,它就可以正常工作。
[mike@crest ~]$ export PS1="\[\033[44m\033[1;37m\][timer]>>\[\033[0m\] "
[timer]>>
我在这里遗漏了什么?
答案1
根据http://mywiki.wooledge.org/BashFAQ/053checkwinsize
如果滚动查看命令历史记录,则可能需要该选项:
shopt -s checkwinsize