Kei*_*son 10
如果你的终端仿真器支持的话,您可以通过所用相同的机制做到这一点less
,vim
等,即ti
和te
的termcap能力(smcup
以及rmcup
在更现代的terminfo)。它们分别从主屏幕切换到辅助屏幕,然后再切换回主屏幕。
如果您的系统有该tput
命令,您可以使用:
tput smcup # switch to secondary screen
...
tput rmcup # switch back to primary screen
Run Code Online (Sandbox Code Playgroud)
否则,对于xterm
,并且可能对于大多数其他终端仿真器,这是:
printf '\e[7\e[?47h'
Run Code Online (Sandbox Code Playgroud)
应该切换到辅助屏幕,这是:
printf '\e[2J\e[?47l\e8'
Run Code Online (Sandbox Code Playgroud)
应该切换回主(并将光标放回原来的位置)。
tcsh 有一个内置echotc
命令,所以你可以这样做:
tcsh -c 'echotc ti'
...
tcsh -c 'echotc te'
Run Code Online (Sandbox Code Playgroud)
(或者,echotc
如果您碰巧正在使用 tcsh,则直接使用)。
这就是所谓的“交替屏幕”(并作为牛逼Ø p 谷歌命中表明,你是喜欢这个功能异常)。一些终端支持两种屏幕缓冲区,一种用于全屏应用程序,另一种用于面向行的应用程序。Bash 对它们一无所知。如果命令只是向终端发出输出,您可以使用终端控制序列切换到辅助屏幕并返回(这些命令记录在xterm ctlseqs 中)。
printf '\e[?47h'; mycommand; printf '\e[?47l'
Run Code Online (Sandbox Code Playgroud)
请注意,备用屏幕没有回滚,因此您只会看到最后一屏的输出。如果这是一个问题,只需做简单的事情:
mycommand | less
Run Code Online (Sandbox Code Playgroud)
只有两个屏幕缓冲区。如果您想要更多,请使用适当的屏幕多路复用器,例如Screen或Tmux。