在 bash 脚本中使用“备用屏幕”

2023-11-29

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

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

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

但是,我找不到这样的能力man terminfo。但也许我在寻找解决方案的道路上走错了。也许 terminfo / tput 不是我的朋友。

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


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

$ tput smcup

并返回:

$ tput rmcup

这些命令只是输出适合您终端的转义序列。如果它是 XTERM,它们将相当于(更知名但不太优雅或可移植):

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

And:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 bash 脚本中使用“备用屏幕” 的相关文章

  • 为什么我可以直接从 bash 执行 JAR?

    我是一个长期从事 Java 工作的人 并且知道运行带有主类的 JAR 的方法MANIFEST MFJar 中的文件很简单 java jar theJar jar 我用它来启动 Fabric3 服务器 包含在bin server jar在其标
  • 多处理:仅使用物理核心?

    我有一个函数foo它消耗大量内存 我想并行运行多个实例 假设我有一个有 4 个物理核心的 CPU 每个核心有两个逻辑核心 我的系统有足够的内存来容纳 4 个实例foo并行但不是 8 个 此外 由于这 8 个核心中的 4 个是逻辑核心 我也不
  • 如何确保应用程序在 Linux 上持续运行

    我试图确保脚本在开发服务器上保持运行 它会整理统计数据并提供网络服务 因此它应该会持续存在 但一天中有几次 它会因未知原因而消失 当我们注意到时 我们只需再次启动它 但这很麻烦 并且某些用户没有权限 或专有技术 来启动它 作为一名程序员 我
  • Gtk-ERROR **:检测到 GTK+ 2.x 符号

    我正在使用 gcc 编译我的 c 应用程序 并使用以下标志 gcc evis c pkg config cflags libs gtk 2 0 libs clutter gtk 1 0 libs gthread 2 0 Wall o evi
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 按进程名称过滤并记录 CPU 使用情况

    Linux 下有选项吗顶部命令 https www man7 org linux man pages man1 top 1 html我可以在哪里按名称过滤进程并将每秒该进程的 CPU 使用情况写入日志文件 top pgrep 过滤输出top
  • 监视目录的更改

    很像一个类似的问题 https stackoverflow com questions 112276 directory modification monitoring 我正在尝试监视 Linux 机器上的目录以添加新文件 并希望在这些新文
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 如何在 bash 上运行 MySQL 命令?

    以下代码在命令行上运行 mysql user myusername password mypassword database mydatabase execute DROP DATABASE myusername CREATE DATABA
  • 如何构建任务“gems:install”

    我正在将 Rails 应用程序部署到 Linux 服务器 并且缺少一些 rake 任务 包括 rake gems install 和 rake db 我正在运行来自 GEM 的 Rails 2 3 4 为什么是这样 我该如何解决 我可以以某
  • Urwid:使光标不可见

    我正在使用 urwid 它是一个用于在 ncurses 中设计终端用户界面的 Python 框架 但有一件事我在 urwid 中无法做到 而这在 Curses 中很容易做到 使光标不可见 现在 选择按钮时光标是可见的 而且看起来很丑 有办法
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • 什么是 .un~ 文件或者为什么终端中的 Vim 会创建 .un~ 文件?

    我注意到我有一些以 un 例如我有一个 vividchalk vim un 但我不确定它是从哪里来的 看起来它们是我在终端中使用 Vim 时创建的 这些文件是什么 当我关闭正在编辑的文件时 可以让它们自行删除吗 当你编辑和保存文件时 Vim
  • 通过shell脚本进行串口控制

    我正在开发一个方向控制器 我有一个开发板 它通过 I2C 与传感器 指南针 通信 由于主板非常有限 没有操作系统 我开发了一个简单的程序来接收以下内容 1 get 0 读取传感器的寄存器 0 2 set 0 10 将传感器的寄存器 0 设置
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • 用等号完成命令选项

    我正在尝试为可能需要表单上的长选项的命令编写一个 Bash 完成脚本 option or param value 如果用户已经在命令行上输入了一个选项 则该选项应从完成列表中排除 假设仅在命令行上指定一次给定选项才有意义 这是第一次尝试 m
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • 使用 python 更改目录

    我碰巧发现我无法从 python 代码中更改实际目录 我的测试程序如下 from os import system def sh script system bash c s script sh cd home sh pwd 的输出pwd
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两

随机推荐

  • 如何在结构体中重载运算符 <<

    我只想打印结构的两个值 但无法编译我的代码 我得到 没有运算符 include
  • 在 Windows 上的 Django 应用程序中使用 PIL 时出现问题

    我正在学习一点 Django使用 Django 进行 Python Web 开发书 一切都很顺利 直到我尝试构建photos需要 PIL Python 图像库 的应用程序 当我尝试通过管理界面添加图像时 我收到下面粘贴的错误消息 我正在运行
  • Bootstrap 模式响应式垂直居中?

    如何垂直居中引导模式 我在这里四处寻找解决方案 但它们没有响应 或者根本不起作用 我正在使用 Bootstrap 3 该模式不再响应较小的屏幕 或者在使用以下解决方案后调整浏览器窗口大小时 jquery modal on shown bs
  • C++ 中使用 cout 递增和递减[重复]

    这个问题在这里已经有答案了 我是 C 新手 正在研究增量和减量运算符 所以我尝试了这个例子 int x 4 cout lt lt x lt lt lt lt x lt lt lt lt x lt lt endl lt lt endl cou
  • 不在 Azure 上托管时生产服务器上的 .NET Core 机密

    我一直在尝试了解 NET Core 如何处理敏感信息 并且正在努力弄清楚如何在生产环境中进行部署isn t托管在 Azure 上 据我了解 我可以在本地开发环境上使用 秘密存储 来存储敏感信息 但这仅适用于开发环境 如果我想访问生产环境中的
  • 在 Flask 中为 url_for 创建动态参数

    我有一个 jinja2 模板 我将其重复用于不同的 Flask 路由 所有这些路由都有一个必需参数并且仅处理GET请求 但某些路由可能有额外的参数 有没有办法附加额外的参数url for 就像是 url for my custom url
  • Flutter:在恢复时更新小部件?

    在 Flutter 中 有没有办法在用户离开应用程序并立即返回时更新小部件 我的应用程序是基于时间的 尽快更新时间会很有帮助 您可以通过执行以下操作来监听生命周期事件 import package flutter material dart
  • CSRF 状态令牌与提供的状态令牌不匹配[重复]

    这个问题在这里已经有答案了 我知道 stackoverflow 上有大量关于 CSRF 状态令牌与提供的令牌不匹配 问题的帖子 但是 我尝试过 似乎没有解决问题 你能看一下我下面的代码吗 请告诉我你的想法以及如何解决这个问题 我已经更新到最
  • WPF 保留 Tab 控件状态

    我已阅读帖子 如何停止 Wpf Tabcontrol 以在选项卡更改时卸载可视化树 但我无法让它工作 我一定错过了一些东西 请帮忙 谢谢 我正在使用示例项目 中的TabControlEx类http www pluralsight train
  • C++ EOF 运行太多次?

    这是我第一次使用 EOF 和 或文件 我遇到了代码挂起的问题 我相信这是因为我的 EOF 循环次数太多 我从文件中进行输入 并以这种方式动态创建对象 一旦文件运行完毕 它就会挂起 while studentFile eof cout lt
  • 如何使用 Alpha 通道为 png 图像着色?

    我正在尝试编写典型的 DVD 弹跳屏幕保护程序 我对此很满意 但我想在每次它撞到墙上时改变标志的颜色 我使用了 fill 但徽标变为彩色矩形 我想更改徽标的颜色 尊重图像的 Alpha 通道 from pygame import impor
  • 我的 Hive 客户端停止使用 Cosmos 实例

    我有一个 Hive 客户端 用 Java 编写 它与 FIWARE 实验室的 Cosmos 全局实例配合得很好 但是 它不再工作了 客户端似乎无法连接 超时 服务器端有什么变化吗 这是因为 FIWARE Lab 的 Cosmos 全局实例已
  • Kotlin 匿名函数用例?

    根据我的理解 Kotlin 中的匿名函数允许您指定返回类型 除此之外 anonymous 中的 return 语句将仅退出函数块 而在 lambda 中它将退出封闭函数 不过 我无法想象 lambda 语法无法提供的 Kotlin 中匿名函
  • 求VCL工具栏布局图设计

    我正在寻找 C 构建器的 VCL 组件 它最好有一个具有拖放功能的工具栏 我想定义一个建筑物或区域 可能不是矩形 并将其分成 房间 或区域 或任何你想称呼它们的东西 我希望能够将 门口 或通道等 从一个房间放入其邻居中 有这样的事吗 最好是
  • 使用 Python 将 Pandas DataFrame 导出为 PDF 文件

    在 Pandas 中为数据框生成 PDF 的有效方法是什么 第一个绘图表matplotlib然后生成pdf import pandas as pd import numpy as np import matplotlib pyplot as
  • HTML WebSocket 是否为每个客户端维护一个开放连接?这个有规模吗?

    我很好奇是否有人有关于 HTML WebSockets 可扩展性的任何信息 对于我读到的所有内容 似乎每个客户端都会与服务器保持开放的通信线路 我只是想知道它是如何扩展的以及服务器可以处理多少个打开的 WebSocket 连接 也许让这些连
  • Java 中如何找到给定类的所有子类?

    在 Java 中 如何尝试查找给定类的所有子类 或给定接口的所有实现者 到目前为止 我有一种方法可以做到这一点 但我发现它效率很低 至少可以说 方法是 获取类路径上存在的所有类名的列表 加载每个类并测试它是否是所需类或接口的子类或实现者 在
  • 不使用 gethostbyname 从 DNS 获取 IP?

    PHP s 获取主机名 就超时而言 函数似乎不可配置 我想将 DNS 请求限制为 1 秒或更短 因为再多的请求就会显示问题并应被忽略 那么 有没有一种方法可以使用套接字或 cURL 来进行 DNS 查询呢 我能够使用 PHP 流发出 SMT
  • 如何恢复 JavaFX TableColumn 的 onEditCommit 中的先前值?

    我有一个用 JavaFX 编写的表 用户可以选择编辑其中一列 当对单元格进行编辑时 我尝试根据新文本重命名一些内部对象 如果重命名失败 我会发出通知并弹出错误对话框 然后我想将原始文本恢复到该字段中 由于某种原因 这让我陷入了错误弹出窗口的
  • 在 bash 脚本中使用“备用屏幕”

    The 备用屏幕被许多 用户交互 终端应用程序使用 如 vim htop screen alsamixer less 它就像终端内容的不同缓冲区 当应用程序退出时它会消失 因此整个终端会恢复并看起来应用程序没有输出任何内容 我想在我自己的