行尾的ANSI转义代码怪异行为

时间:2018-12-12 10:01:22

标签: bash shell xterm gnome-terminal

复制步骤

考虑以下shell命令:

echo -e "\e[41mTest\nTest2\e[0mTest3"

它将打印Test,并在下一行Test2中用红色背景(使用ANSI转义码)打印。 Test2之后紧跟着无色的Test3

行为

第一次执行此命令时,一切都会按预期进行。但是输出不一致。大约10到20次调用后,第二行的结尾也变为红色。我首先在我的C ++应用程序中偶然发现了这一点。所以我认为这可能与bash无关。

发现之后,我发现这可能是gnome-terminal中的错误。但是,该行为在xterm中是完全相同的。

编辑

感谢Geno Chen的评论,我发现这是在终端机用完线并且必须滚动时发生的。

屏幕截图

以下是上述问题的屏幕截图:

GNOME终端

GNOME Terminal

xterm

xterm

有问题的东西

尽管这使我的C ++ App中的事情有些不清楚,但它并不能解决问题。但是我想知道我的转义序列是否有问题,或者这是外壳某些部分的错误。如果有什么事情我可以修复或解决。

2 个答案:

答案 0 :(得分:4)

使用当前选定的颜色填充行是bce(背景色擦除)的详细信息,可以在不同的终端中以不同的方式实现它-但是Linux控制台和xterm恰好是这样做的。这是一个常见问题解答:

答案 1 :(得分:2)

这适用于所有搜索快速答案的人。 通过Thomas Dickey的答案链接,我想到了以下解决方法。

echo -e "\e[41mTest\nTest2\e[0mTest3\e[K"

\e[K部分使用当前背景色绘制行的其余部分。由于需要在使用颜色的每一行的每个换行符之前发送该消息,因此我不得不重写我的代码...