当我跑步时
$ screen id
我只能看到[screen is terminating]
屏幕顶部的消息。我想看到的是命令的输出id
和[screen is terminating]
消息。我可以通过以下方式得到他的:
$ TERM=vt102 screen id
在这种情况下, screen(1) 不会清除屏幕,但会在末尾发出许多空行,因此我可以向上滚动并查看id
.
但是,我不想使用TERM=vt102
,因为我需要一些更高级的终端功能。
如何防止 screen(1) 在终止时清除屏幕?
答案1
请注意,这screen
是一个终端模拟器。所以你的问题有点像问我如何开始xterm
并gnome-terminal
让最后显示的内容在退出时xterm
可见。gnome-terminal
xterm
xterm
现在和之间的区别screen
在于,虽然xterm
使用 X 协议来绘制屏幕,但screen
使用主机终端。
默认情况下,screen
将清除其主机终端的屏幕以显示其自己的模拟终端,并且在可用的情况下将使用备用屏幕(清除之前)该主机终端,以便在终止时,它可以恢复主机终端在启动之前的状态。
所以你看到的并不是screen
离开时清屏,而是恢复主机终端的主屏幕。最后显示的窗口内容screen
仍然存在于备用屏幕上。使用xterm
,您可以通过选择来查看它显示备用屏幕在 Ctrl+中键单击菜单中。
如果主机终端不支持备用屏幕(例如 vt102),则显然无法做到这一点。相反,它什么也不做,这基本上就是你想要的。
因此,您可以做的是告知screen
主机终端不支持备用屏幕。为此,您可以添加~/.screenrc
:
termcapinfo * ti=:te=
其中表示:对于所有可能的主机终端(*
,与 匹配$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”字符串的程序应该在退出时输出该字符串。
但这转化为备用屏幕对于大多数终端模拟器(具体来说,在xterm
它的备用屏幕以及保存/恢复光标位置)