终止时如何防止GNU屏幕清除屏幕?

pts*_*pts 2 gnu-screen

当我跑

$ screen id
Run Code Online (Sandbox Code Playgroud)

我只能看到[screen is terminating]屏幕顶部的消息。我想看到的是id命令和[screen is terminating]消息的输出。我可以得到他的:

$ TERM=vt102 screen id
Run Code Online (Sandbox Code Playgroud)

在这种情况下, screen(1) 不会清除屏幕,但会在最后发出许多空行,因此我可以向上滚动并查看id.

但是,我不想使用TERM=vt102,因为我需要一些更高级的终端功能。

如何防止 screen(1) 在终止时清除屏幕?

Sté*_*las 10

请注意,这screen是一个终端模拟器。所以你的问题有点像问我怎么能开始xtermgnome-terminal和有什么最后显示xterm在我看到gnome-terminal的时候xterm退出。

现在之间的差xtermscreen是,虽然xterm使用X协议要绘制它的屏幕上,screen使用一个主机终端。

默认情况下,screen将清除其主机终端的屏幕以显示其自己的模拟终端,并且在可用的情况下将使用该主机终端的备用屏幕(清除前),以便在终止时可以恢复主机终端状态开始。

所以你看到的不是screen离开时清屏,而是恢复主机终端的主屏幕。screen上次显示的窗口内容仍然存在于备用屏幕上。使用xterm,您可以通过在 Ctrl+MiddleClick 菜单中选择显示替代屏幕查看它。

如果主机终端不支持备用屏幕(如 vt102 的),它显然不能这样做。相反,它什么都不做,这基本上就是你想要的。

因此,您可以做的是告诉screen主机终端不支持备用屏幕。为此,您可以添加到~/.screenrc

 termcapinfo * ti=:te=
Run Code Online (Sandbox Code Playgroud)

其中说:对于所有可能的主机终端(*,与 匹配$TERM),覆盖termcap/terminfo数据库以说明对于这些终端,进入或离开备用屏幕的转义序列是空字符串。

tite并不完全意味着备用屏幕。从https://www.gnu.org/software/termutils/manual/termcap-1.3/html_node/termcap_39.html

  • ti( smcupin terminfo)
    命令字符串,用于将终端置于需要或适合在屏幕上无序移动光标的程序的任何特殊模式。使用 termcap 进行全屏显示的程序在启动时应该输出这个字符串。

  • te( rmcupin terminfo)
    用于撤消ti字符串所做操作的命令字符串。在进入时输出 `ti' 字符串的程序应该在退出时输出这个字符串。

但是,转换到备用屏幕的大部分终端仿真器(specically,在xterm它的备用屏幕和保存/恢复指针的位置)