linux – 保存并恢复终端内容

linux – 保存并恢复终端内容,第1张

概述我正在编写自动化脚本(perl / bash).其中许多受益于一些基本的终端GUI.我想我会使用标准ANSI序列进行基本绘图.在绘制终端之前我做了清楚但是这样做我丢失了一些终端命令历史记录.我希望能够在程序存在时恢复终端命令历史记录.许多终端程序(例如less,man, vim,htop,nmon,whiptail,dialog等)就是这样做的.所有这些都恢复了终端窗口,使用户返回到他之前调用程序 我正在编写自动化脚本(perl / bash).其中许多受益于一些基本的终端GUI.我想我会使用标准ANSI序列进行基本绘图.在绘制终端之前我做了清楚但是这样做我丢失了一些终端命令历史记录.我希望能够在程序存在时恢复终端命令历史记录.许多终端程序(例如less,man,vim,htop,nmon,whiptail,dialog等)就是这样做的.所有这些都恢复了终端窗口,使用户返回到他之前调用程序的位置,其中包含先前执行的所有命令历史记录.

说实话,我甚至不知道从哪里开始搜索.它是来自curses库的命令吗?它是ANSI转义序列吗?我应该捣乱吗?我被卡住了,任何指针都会非常有用.

编辑:我想澄清一点,我并不是在问“如何使用替代屏幕”.我正在寻找一种方法来保存终端命令历史.我的问题的一个可能的答案可能是“使用替代屏幕”. “什么是替代屏幕以及如何使用它”的问题是一个不同的问题,而这个问题又已经在其他地方发布了答案.谢谢 :)

解决方法 您应该使用备用屏幕终端功能.看到
Using the “alternate screen” in a bash script

“如何使用备用屏幕”的答案:

这个例子应该说明:

#!/bin/sh: <<descShows the top of /etc/passwd on the terminal for 1 second and then restores the terminal to exactly how it wasdesctput smcup #save prevIoUs statehead -n$(tput lines) /etc/passwd #get a screenful of linessleep 1tput rmcup #restore prevIoUs state

这只能在终端上工作,具有smcup和rmcup功能(例如,不在linux控制台(=虚拟控制台)).
可以使用infocmp检查终端功能.

在不支持它的终端上,我的tput smcup只返回退出状态1而不输出转义序列.

注意:

如果您打算重定向输出,可能需要将转义序列直接写入/ dev / tty,以免弄乱它们的stdout:

exec 3>&1 #save old stdoutexec 1>/dev/tty #write directly to terminal by default#...cat /etc/passwd >&3 #write actual intended output to the original stdout#...
总结

以上是内存溢出为你收集整理的linux – 保存并恢复终端内容全部内容,希望文章能够帮你解决linux – 保存并恢复终端内容所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1033026.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存