1

这个问题纯粹是出于好奇;没有问题需要解决。

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

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

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

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

但是,在我less创建文件并退出后,会发生两件事:

  1. Konsole 恢复正常工作。
  2. 我使用之前终端中的less任何输出都将替换为前一天的任何输出,在会话通过关闭我正在从中进行 SSH 连接的 VM 中断之前。

奇怪的是,这发生在所有约 4 个并发终端/会话上(每个都恢复了前一天的输出)。[编辑:澄清:当我在该特定终端中进行 SSH/less 操作时,~4 个终端中的每一个都表现出这种行为。每个都恢复前一天的输出。在一个终端/会话中执行此操作不会影响其他终端/会话]

我认为这会发生在任何具有自己的“gui”并且不特定于less.

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

知道发生了什么吗?

4

1 回答 1

1

问题中描述的终端功能备用屏幕功能(最初xterm,但被其他几个终端复制/模仿,包括konsole)。根据终端描述,您可能/可能不会使用此功能。

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

从描述中,听起来好像您在同一实例中使用不同的选项卡konsole,并且它记得您的终端已设置为备用屏幕。 konsole和其他一些程序在停止时尝试保存/恢复“会话”信息,因此保存/恢复似乎是一件好事。

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

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

tput rmcup

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

进一步阅读:

于 2017-08-02T20:10:49.843 回答