Bash 清屏除了第一行

Bash 清屏除了第一行

我的脚本回显一些文本并进行进一步处理。使用 tput 我想清除屏幕并保留屏幕上的第一行。

例如。

echo Started
seq 1000
tput cup 1 0 && tput ed

这样 Started 仍保留在屏幕上,其他所有内容都被清除,但它仅在输出较小(如 seq 10)时有效,但不适用于较长的滚动输出

答案1

有些终端允许您定义滚动区域:

tput csr 1 "$(( ${LINES:-$(tput lines)} - 1 ))"
tput clear
echo Started
seq 1000

设置从第二行到最后一行的滚动区域,以便“开始”行不会滚动到屏幕之外。进而:

tput cup 1 0 && tput ed

再次清除第二行到最后一行。

详细信息请参见 terminfo(5)。

从版本 608 开始,less还有一个--header=lines[,cols]选项允许指定不滚动的标题行:

{
  echo Started; seq 1000
} | less --header=1

您可以添加-X输出选项,包括less返回后保留在屏幕上的标题。另请参阅允许图形再现转义序列的-R选项,以及如果输入适合屏幕则不分页的选项。less-F

相关内容