考虑以下shell命令:
echo -e "\e[41mTest\nTest2\e[0mTest3"
它将打印Test
,并在下一行Test2
中用红色背景(使用ANSI转义码)打印。 Test2
之后紧跟着无色的Test3
。
第一次执行此命令时,一切都会按预期进行。但是输出不一致。大约10到20次调用后,第二行的结尾也变为红色。我首先在我的C ++应用程序中偶然发现了这一点。所以我认为这可能与bash无关。
发现之后,我发现这可能是gnome-terminal
中的错误。但是,该行为在xterm
中是完全相同的。
感谢Geno Chen的评论,我发现这是在终端机用完线并且必须滚动时发生的。
以下是上述问题的屏幕截图:
尽管这使我的C ++ App中的事情有些不清楚,但它并不能解决问题。但是我想知道我的转义序列是否有问题,或者这是外壳某些部分的错误。如果有什么事情我可以修复或解决。
答案 0 :(得分:4)
使用当前选定的颜色填充行是bce
(背景色擦除)的详细信息,可以在不同的终端中以不同的方式实现它-但是Linux控制台和xterm恰好是这样做的。这是一个常见问题解答:
indn
)答案 1 :(得分:2)
这适用于所有搜索快速答案的人。 通过Thomas Dickey的答案链接,我想到了以下解决方法。
echo -e "\e[41mTest\nTest2\e[0mTest3\e[K"
\e[K
部分使用当前背景色绘制行的其余部分。由于需要在使用颜色的每一行的每个换行符之前发送该消息,因此我不得不重写我的代码...