alternate screen被许多"用户交互"终端应用程序使用,比如vim、htop、screen、alsamixer、less等等...它就像终端内容的另一个缓冲区,当应用程序退出时,缓冲区就会消失,所以整个终端都会恢复,看起来应用程序没有输出任何内容.

我希望在我自己的shell(bash)脚本中实现完全相同的功能,只是它不需要那么便携.我坚持只使用linux和基于xterm的终端模拟器;但如果可能的话,解决方案应该使用tput左右.然而,我不想使用一些外部脚本语言(甚至像C这样的语言).

虽然我不想使用C(因为它应该是一个依赖项尽可能少的bash脚本),但我还是研究了less的源代码.它似乎使用terminfo作为数据库,并在初始化时查找"ti"终端功能.当删除该行时,它不使用备用sceen,所以我假设我找到了负责的代码行.

然而,我在man terminfo台电脑中找不到这样的功能.但也许我在寻找解决方案的道路上走错了.也许terminfo/tput不是我的朋友.

那么(如何)在bash脚本中使用备用屏幕呢?有人知道一个简单的应用程序,在它的源代码中我可以找到提示吗?(C应用程序或bash脚本或其他任何内容)

推荐答案

您可以使用以下命令切换到备用屏幕:

$ tput smcup

回来的时候:

$ tput rmcup

这些命令只是为终端输出适当的转义序列.如果是XTERM,它们将等同于(更知名但不那么优雅或便携):

$ echo -e "\e[?1049h"

以及:

$ echo -e "\e[?1049l"

有关更多终端控制命令,请参见man 5 terminfo.

Linux相关问答推荐

将十六进制文件名转换为十进制

Git - 打印以不同编码混合的文件

Linux内核模块构建过程中,许可信息添加了前缀

8 个半小时范围的 Crontab 表达式

Bash shift 改变了关联数组的期望值

如何在 AWS Linux 服务器上实现虚拟主机?

Linux C程序:如何找到函数所属的库

如何将执行的shell命令的结果存储在python的变量中?

来自远程主机的 mysqldump

分段故障处理

为什么可执行文件操作系统依赖于?

在 Linux 上用 C 语言读写串口

如果关键字触发然后执行命令,Shell 脚本来监视日志(log)文件?

如何在 shell 脚本中向文件中添加一行?

如何链接到 GCC 中特定版本的共享库

在 PHP / Apache / Linux 环境中,为什么 chmod 777 是危险的?

Postgresql -bash:psql:找不到命令

未找到版本CXXABI_1.3.8(...要求)

编辑文件时保留 samba 共享的文件权限

Linux 上的 OpenVPN:在命令行中传递用户名和密码