console/shell caching/restoration 是如何工作的?
How does console/shell caching/restoration work?
这个问题纯属好奇;没有问题要解决
注意:我在 CentOS 7 上使用 Konsole。
当我通过 SSH 连接到远程机器并让会话暂时处于非活动状态时,它会超时。作为解决方法,我使用 less [some-file]
来保持会话处于活动状态。
显然,当我在一天结束时暂停 VM 时,会话仍然中断。
第二天,当我开始一个新的 SSH 会话时,一切正常 除了 某些 Konsole 功能不起作用(即清除回滚,我经常使用它)对于用于 SSH 会话的同一终端 window。
但是,在我 less
一个文件并退出后,发生了两件事:
- Konsole 恢复正常工作。
- 在我使用
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
(如果终端描述没有 有 定义,它什么都不做)。
延伸阅读:
这个问题纯属好奇;没有问题要解决
注意:我在 CentOS 7 上使用 Konsole。
当我通过 SSH 连接到远程机器并让会话暂时处于非活动状态时,它会超时。作为解决方法,我使用 less [some-file]
来保持会话处于活动状态。
显然,当我在一天结束时暂停 VM 时,会话仍然中断。
第二天,当我开始一个新的 SSH 会话时,一切正常 除了 某些 Konsole 功能不起作用(即清除回滚,我经常使用它)对于用于 SSH 会话的同一终端 window。
但是,在我 less
一个文件并退出后,发生了两件事:
- Konsole 恢复正常工作。
- 在我使用
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
(如果终端描述没有 有 定义,它什么都不做)。
延伸阅读: