以下是用例:
- 脚本
node.js
清除控制台。 然后它将一些元数据发送到控制台。(模块名称, 和标语。有点像应用程序的标题。)
它将过去的数据发送到控制台。(有点像应用程序的初始内容,由于它是过去的,因此在发布后不会改变。至少,直到退出时不会改变。)
它按照模块的用途执行其应执行的操作,并将其传输到控制台。
第 4 步是一个连续的过程。因此,你可以将第 4 步想象成一个钟. 每一秒之后,时钟都会重置并显示新的时间。
\033c
如果没有步骤 1-3,那么就可以正常工作。但是,它们确实存在,我能想到的唯一方法是再次打印所有数据。
虽然可以工作,但这不是性能最好的代码。那么,我有什么办法可以清除步骤 4 的输出,然后重新打印更改后的输出吗?
笔记:终端的最后一行不一定是程序的最后一行。
答案1
如果没有步骤 1-3,\033c 就可以正常工作。
\033
是 ASCIIEscape
控制代码字符。我相信Escape c
这是用于重置终端的 ANSI 终端命令序列。
您可以发出CR
(回车)将光标移动到左边距,然后发出Escape [ K
(清除到行尾)。
如果步骤 4 的输出有多行,则需要发出适当的命令将光标移动到行、列并清除到屏幕末尾。
搜索“ANSI 终端控制代码”应该可以找到有用的参考资料。
我需要...某种 bash 命令
man tput
考虑
$ echo aaa bbb ccc `tput cr`xxx
xxx bbb ccc
$ echo aaa bbb ccc `tput cr`xxx `tput el`
xxx
或者
$ echo aaa bbb ccc; echo ddd eee fff
aaa bbb ccc
ddd eee fff
$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 23 3` ZZZ
aaa bbb ccc
ddd ZZZ fff
或者
$ echo aaa bbb ccc; echo ddd eee fff; echo `tput cup 22 3` ZZZ `tput ed`
aaa ZZZ
其中使用的功能代码为
cr
= 回车(光标移到左边距)。el
= 清除从光标到行尾的内容。cup
= 光标定位。ed
= 清除从光标到屏幕末尾的内容。
这些能力代码列在 中man terminfo
。
如果你想知道 tput 正在做什么,你可以这样做
$ (tput cup 23 3; echo) | cat -v
^[[24;4H
其中^[
代表控制代码Escape
(\033)。
这将为你提供你可以以任何你打算使用的方式使用的值\033c