![在另一个“屏幕”上显示输出并在完成后恢复正常](https://linux22.com/image/20036/%E5%9C%A8%E5%8F%A6%E4%B8%80%E4%B8%AA%E2%80%9C%E5%B1%8F%E5%B9%95%E2%80%9D%E4%B8%8A%E6%98%BE%E7%A4%BA%E8%BE%93%E5%87%BA%E5%B9%B6%E5%9C%A8%E5%AE%8C%E6%88%90%E5%90%8E%E6%81%A2%E5%A4%8D%E6%AD%A3%E5%B8%B8.png)
我想要与等使用类似的行为less
vim
nano
。
这可以用 bash 来实现吗?
答案1
less
如果您的终端仿真器支持它,您可以使用、vim
、 等人使用的相同机制来执行此操作,即ti
和te
termcap 功能(smcup
以及rmcup
在更现代的 terminfo 中)。它们分别从主屏幕切换到辅助屏幕,然后再切换回主屏幕。
如果您的系统有该tput
命令,您可以使用:
tput smcup # switch to secondary screen
...
tput rmcup # switch back to primary screen
否则,对于xterm
,并且可能对于大多数其他终端仿真器,如下:
printf '\e[7\e[?47h'
应该切换到辅助屏幕,如下:
printf '\e[2J\e[?47l\e8'
应该切换回主屏幕(并将光标放回原来的位置)。
tcsh 有一个内置echotc
命令,因此您可以执行以下操作:
tcsh -c 'echotc ti'
...
tcsh -c 'echotc te'
echotc
(或者如果您碰巧使用 tcsh,则直接使用)。
答案2
这称为“备用屏幕”(并且作为t哦p 谷歌点击表明您对这个功能的喜爱程度非同寻常)。某些终端支持两个屏幕缓冲区,一个由全屏应用程序使用,另一个由面向行的应用程序使用。 Bash 对它们一无所知。如果命令只是将输出发送到终端,您可以使用终端控制序列来切换到辅助屏幕并返回(这些命令记录在xterm ctlseqs)。
printf '\e[?47h'; mycommand; printf '\e[?47l'
请注意,备用屏幕没有回滚功能,因此您只能看到最后一屏的输出。如果这是一个问题,只需做简单的事情:
mycommand | less
答案3
Bash 对屏幕一无所知(事实上,它可以在不被看到的情况下运行)。不过,您可以将标准输出和标准错误重定向到任何文件或管道。
答案4
当前的答案似乎都不适用于我的机器,但我发现了名为 的命令screen
,这似乎对我有用。