当我跑
$ 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
是一个终端模拟器。所以你的问题有点像问我怎么能开始xterm
从gnome-terminal
和有什么最后显示xterm
在我看到gnome-terminal
的时候xterm
退出。
现在之间的差xterm
和screen
是,虽然xterm
使用X协议要绘制它的屏幕上,screen
使用一个主机终端。
默认情况下,screen
将清除其主机终端的屏幕以显示其自己的模拟终端,并且在可用的情况下将使用该主机终端的备用屏幕(清除前),以便在终止时可以恢复主机终端状态开始。
所以你看到的不是screen
离开时清屏,而是恢复主机终端的主屏幕。screen
上次显示的窗口内容仍然存在于备用屏幕上。使用xterm
,您可以通过在 Ctrl+MiddleClick 菜单中选择显示替代屏幕来查看它。
如果主机终端不支持备用屏幕(如 vt102 的),它显然不能这样做。相反,它什么都不做,这基本上就是你想要的。
因此,您可以做的是告诉screen
主机终端不支持备用屏幕。为此,您可以添加到~/.screenrc
:
termcapinfo * ti=:te=
Run Code Online (Sandbox Code Playgroud)
其中说:对于所有可能的主机终端(*
,与 匹配$TERM
),覆盖termcap/terminfo
数据库以说明对于这些终端,进入或离开备用屏幕的转义序列是空字符串。
ti
而te
并不完全意味着备用屏幕。从https://www.gnu.org/software/termutils/manual/termcap-1.3/html_node/termcap_39.html:
ti
(smcup
interminfo
)
命令字符串,用于将终端置于需要或适合在屏幕上无序移动光标的程序的任何特殊模式。使用 termcap 进行全屏显示的程序在启动时应该输出这个字符串。
te
(rmcup
interminfo
)
用于撤消ti
字符串所做操作的命令字符串。在进入时输出 `ti' 字符串的程序应该在退出时输出这个字符串。
但是,转换到备用屏幕的大部分终端仿真器(specically,在xterm
它的备用屏幕和保存/恢复指针的位置)