console/shell caching/restoration 是如何工作的?

How does console/shell caching/restoration work?

这个问题纯属好奇;没有问题要解决

注意:我在 CentOS 7 上使用 Konsole。

当我通过 SSH 连接到远程机器并让会话暂时处于非活动状态时,它会超时。作为解决方法,我使用 less [some-file] 来保持会话处于活动状态。

显然,当我在一天结束时暂停 VM 时,会话仍然中断。

第二天,当我开始一个新的 SSH 会话时,一切正常 除了 某些 Konsole 功能不起作用(即清除回滚,我经常使用它)对于用于 SSH 会话的同一终端 window。

但是,在我 less 一个文件并退出后,发生了两件事:

  1. Konsole 恢复正常工作。
  2. 在我使用 less 之前终端中的任何输出都被替换为前一天的任何输出,在会话因关闭我正在使用 SSH 的 VM 而中断之前。

奇怪的是,这发生在所有 ~4 个并发 terminals/sessions 上(每个都恢复了前一天的输出)。 [编辑:澄清:当我在那个特定终端中 SSH/less 时,~4 个终端中的每一个都表现出这种行为。每个人都从前一天恢复输出。在一个 terminal/session 中这样做 不会 影响另一个 terminals/sessions]

我假设任何终端应用程序(例如 vi、nano 等)都有自己的 "gui" 并且不特定于 less

似乎正在进行一些缓存。我假设退出 less(或 vi、nano 等)通常会触发某种 shell 输出恢复,但这种特殊表现似乎有些奇怪。

知道发生了什么吗?

问题 alternate screen 功能中描述的 terminal 功能(最初是 xterm,但 copied/imitated通过其他几个终端,包括 konsole)。根据终端描述,您 may/may 不使用此功能。

less 和大多数全屏终端程序,如 vi 发送转义序列以切换 to/from 备用屏幕,如果它们在终端描述中定义(即 TERM=xterm).

根据描述,听起来好像您在 konsole 的同一实例中使用不同的选项卡,并且它记得您的终端已设置为备用屏幕。 konsole 和其他一些程序在停止时尝试 save/restore "session" 信息,所以这对 save/restore.

来说可能是件好事

在备用屏幕中,终端程序通常很少或根本无法访问回滚区域。

您可以使用tput发送相同的转义序列(没有运行 less):

tput rmcup

(如果终端描述没有 定义,它什么都不做)。

延伸阅读: