2017-08-02 54 views
1

这个问题纯粹是出于好奇;没有问题需要解决。控制台/外壳缓存/恢复如何工作?

注:我在CentOS 7

使用的Konsole当我ssh来遥控盒,离开会议停用一段时间,超时。作为一种解决方法,我使用less [some-file]来保持会话处于活动状态。

很明显,当我在一天结束时暂停虚拟机时,会话仍然会中断。

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

不过,我less文件并退出后,发生两件事情:

  1. 的Konsole重新开始正常工作。
  2. 无论我在使用less之前终端中的输出是否被替换为前一天输出的任何内容,在会话被关闭之前我正在通过SSH进行关闭。

奇怪的是,这发生在所有〜4个并发终端/会话(每个会话都从前一天恢复输出)。 [编辑:澄清:当我在特定终端中使用SSH/less时,〜4终端中的每一个都表现出这种行为。每个人从前一天恢复输出。这样做在一个终端/会话是而不是影响其他终端/会话]

我认为这将发生在任何终端应用程序(如vi,纳米等)与自己的“贵”,而不是具体到less

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

任何想法是怎么回事?

+0

有你/应用程序之间可以在终端上,如果我是正确的切换几个缓冲区。但我不记得那些机制的实际名称,所以我无法提供更多帮助。但我也会对答案感兴趣! – Jakuje

回答

1

在问题的备用屏幕特征描述的终端特征(最初xterm,但复制/由多个其它终端,包括konsole模仿)。根据终端描述,您可能会/可能不会使用此功能。作为这样vi

less和最全屏终端程序发送转义序列,如果他们在终端描述正在定义为从备用屏幕切换到/(即,TERM=xterm)。

从描述中,听起来好像您在konsole的同一个实例中使用了不同的选项卡,并且它记住您的终端已设置为备用屏幕。 konsole和其他一些程序试图在停止时保存/恢复“会话”信息,以便保存/恢复可能看起来很不错。

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

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

tput rmcup 

(如果终端描述并不的一个定义,它会做什么)。

延伸阅读: