【问题标题】:How does console/shell caching/restoration work?控制台/shell 缓存/恢复如何工作?
【发布时间】:2017-08-02 14:57:40
【问题描述】:

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

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

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

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

第二天当我开始新的 SSH 会话时,一切正常用于 SSH 会话。

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

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

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

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

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

知道发生了什么吗?

【问题讨论】:

  • 如果我是对的,您/应用程序可以在终端中切换多个缓冲区。但我不记得该机制的实际名称,所以我无法提供更多帮助。但我也会对答案感兴趣!

标签: linux caching ssh terminal konsole


【解决方案1】:

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

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

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

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

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

tput rmcup

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

进一步阅读:

【讨论】:

    猜你喜欢
    • 2017-12-28
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2015-09-23
    • 1970-01-01
    • 2013-01-13
    相关资源
    最近更新 更多