清除“旧”回滚缓冲区

清除“旧”回滚缓冲区

这似乎是一个重复的问题,但事实并非如此。

我知道我可以用来printf "\033f"清除“当前”会话的回滚缓冲区,但这对旧会话不起作用。

我的问题是我通过 XVP 查看器(基于 VNC 的 Java Web 浏览器)访问多个虚拟机,并且如果我在每次可以通过滚动屏幕查看所有内容时在注销之前不努力清除屏幕。

请建议一种方法来清除这个旧的回滚缓冲区。

PS:重新启动会清除它,但我无法在生产虚拟机上执行此操作

答案1

Linux 内核自(至少 2011 年)以来一直支持一个可以清除回滚的控制序列,而不是跳过几行:

printf '\033[3J'

ncurses 更改中提到了2011 年 7 月 16 日:

    + add E3 extended capability to linux-basic (Miroslav Lichvar)
    + add linux2.2, linux2.6, linux3.0 entries to give context for E3 -TD

并解释在终端数据库:

# The 3.0 kernel adds support for clearing scrollback buffer (capability E3).
# It is the same as xterm's erase-saved-lines feature.
linux3.0|linux 3.0 kernels,
        E3=\E[3J, use=linux2.6,

这是在一份错误报告中提到的,其中指出 1999 年 6 月添加到 xterm 的一项功能对于提高 Linux 控制台上应用程序的安全性非常有用。

随后(在2013年),该E3功能已添加到clear实用程序中,以便(取决于使用的终端描述)实用程序将清除回滚。关于Ctrl+l指的是 bash 快捷方式,它可能会硬编码相同的转义序列(因为终端数据库不会将clear(或ed) 和E3功能绑定在一起)。

进一步阅读:

答案2

我找到了另一种方法来做到这一点。基本上控制台屏幕有 510 行缓冲区(在我的例子中),因此echoing 511 次会填充所有这些行,清除旧数据。

我在循环echo内使用for

for i in {0..510}
 do
    echo
 done

在旧的 bash 提示符上seq可以使用。

for i in `seq 0 510`
 do
    echo
 done

相关内容