linux - 在 bash 脚本中使用 "alternate screen"

标签 linux bash terminal terminfo

备用屏幕被许多“用户交互”终端应用程序使用,如 vim、htop、screen、alsamixer、less,......它就像终端内容的不同缓冲区,它当应用程序退出时消失,所以整个终端恢复,看起来应用程序没有输出任何东西。

我想在我自己的 shell (bash) 脚本中实现完全相同的功能,只是它不必那么便携。我会坚持只使用 linux 和基于 xterm 的终端仿真器;但如果可能的话,解决方案应该使用类似 tput 的东西。但是,我不想使用一些外部脚本语言(甚至是 C 之类的语言)。

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

但是,我在 man terminfo 中找不到这样的功能。但也许我在寻找解决方案的错误道路上。也许 terminfo/tput 不是我的 friend 。

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

最佳答案

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

$ tput smcup

然后返回:

$ tput rmcup

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

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

还有:

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

更多终端控制命令见man 5 terminfo

关于linux - 在 bash 脚本中使用 "alternate screen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023929/

相关文章:

linux - terminfo 延迟/填充如何在 TTY 中实现?

c++ - 如何在 Mac 上自动获取 C++ 程序的异常类型和消息?

c - 将 C + Makefile 导入 linux IDE?

c - 如何检查哪个进程启动了 sys_open

linux - Bash - 重命名其中有“的文件

bash - Tcsh 和 Bash 初始化

linux - 如何在 Linux 终端中创建电子邮件帐户/地址?

linux - 用 n 步旋转文本文件中的行

python - 将从 python 字典中提取的信息写入文件

bash - $做什么?和 $# 在 Shell 脚本中代表什么?