在另一个“屏幕”上显示输出并在完成后恢复正常

在另一个“屏幕”上显示输出并在完成后恢复正常

我想要与等使用类似的行为less vim nano

这可以用 bash 来实现吗?

答案1

less如果您的终端仿真器支持它,您可以使用、vim、 等人使用的相同机制来执行此操作,即titetermcap 功能(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

这称为“备用屏幕”(并且作为tp 谷歌点击表明您对这个功能的喜爱程度非同寻常)。某些终端支持两个屏幕缓冲区,一个由全屏应用程序使用,另一个由面向行的应用程序使用。 Bash 对它们一无所知。如果命令只是将输出发送到终端,您可以使用终端控制序列来切换到辅助屏幕并返回(这些命令记录在xterm ctlseqs)。

printf '\e[?47h'; mycommand; printf '\e[?47l'

请注意,备用屏幕没有回滚功能,因此您只能看到最后一屏的输出。如果这是一个问题,只需做简单的事情:

mycommand | less 

只有两个屏幕缓冲区。如果您想要更多,请使用适当的屏幕多路复用器,例如屏幕或者多路复用器

答案3

Bash 对屏幕一无所知(事实上,它可以在不被看到的情况下运行)。不过,您可以将标准输出和标准错误重定向到任何文件或管道。

答案4

当前的答案似乎都不适用于我的机器,但我发现了名为 的命令screen,这似乎对我有用。

相关内容