正确覆盖终端中的当前线路

时间:2014-08-21 10:26:30

标签: terminal formatting overwrite carriage-return linefeed

在大多数终端中,如果您还没有打印换行符(或换行符; \n),则打印回车符(\r)会将光标重置为行,以便后续字符覆盖您当前行上已输出的内容。

但是,如果您没有输出足够的字符来完全覆盖该行的先前内容,则其余字符将保留在那里。因此,例如,以下伪代码:

print "goodbye"
print "\rhello"

会产生helloye

我想知道:有没有办法真正清除这些剩下的角色?我可以简单地跟踪它们,然后用空格覆盖它们,但那样,a)要求我跟踪它们,并且b)仍然有尾随空格字符,这不是理想的,我&#39 ; d不愿意这样做(我正在寻找一种可以在将来遇到这个问题时使用的通用解决方案)。任何建议都会很棒;谢谢!

2 个答案:

答案 0 :(得分:1)

尝试使用terminal escape

从行首开始清除:echo -e "\033[1K"
要清除行:echo -e "\033[2K"

假设您有兼容VT100的终端或模拟器

答案 1 :(得分:0)

很久以前,我使用了领先的回车器,效果很好。我只是在Linux Gnome Terminal程序上再次尝试了它,但似乎不起作用:屏幕上没有任何显示。将其改回使用尾随换行,并且我打印的每一行都会显示,但不会被覆盖。我怀疑缺少换行符是阻止它实际发送到显示器的原因。

See this about flushing.