ANSI 转义码在行尾的奇怪行为

Sci*_*dix 5 bash shell xterm gnome-terminal

重现步骤

考虑以下 shell 命令:

echo -e "\e[41mTest\nTest2\e[0mTest3"
Run Code Online (Sandbox Code Playgroud)

Test在下一行打印并Test2带有红色背景(使用 ANSI 转义码)。Test2直接跟在Test3which is uncolored 之后。

行为

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

发现后,我认为这可能是gnome-terminal. 然而,行为在xterm.

编辑

感谢 Geno Chen 的评论,我发现当终端用完行并且必须滚动时会发生这种情况。

截图

以下是上述问题的截图:

GNOME 终端

GNOME 终端

终端

终端

有问题的事情

虽然它使我的 C++ 应用程序中的事情有点不清楚,但它并不是一个交易破坏者。但是我想知道我的转义序列是否有问题,或者这是否是 shell 某些部分的错误。如果我可以做些什么来修复它或解决它。

Sci*_*dix 6

这适用于所有搜索快速答案的人。从托马斯·迪基回答的链接中,我想出了以下解决方法。

echo -e "\e[41mTest\nTest2\e[0mTest3\e[K"
Run Code Online (Sandbox Code Playgroud)

\e[K部件使用当前背景颜色绘制线条的其余部分。由于它需要在使用颜色的每一行的每个换行符之前发送,所以我必须稍微重写我的代码......


Tho*_*key 5

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