保存和恢复终端内容
Save and restore terminal content
我正在编写自动化脚本 (perl
/bash
)。他们中的许多人受益于一些基本的终端 GUI。我想我会使用标准 ANSI
序列来进行基本绘图。在终端绘图之前,我做了 clear
但这样做我丢失了一些终端命令历史记录。当我的程序存在时,我希望能够恢复终端命令历史记录。许多终端程序(例如 less
、man
、vim
、htop
、nmon
、whiptail
、dialog
等)完全符合那。所有这些都恢复终端 window 将用户带回调用程序之前的位置,并包含之前执行的所有命令历史记录。
老实说,我什至不知道从哪里开始搜索。它是来自 curses
库的命令吗?它是 ANSI
转义序列吗?我应该弄乱 tty
吗?我被卡住了,任何指示都会很有帮助。
编辑:我想澄清一下,我并不是真的在问 "how to use the alternative screen"。我正在寻找一种方法来保存终端命令历史记录。我的问题的一个可能答案是“使用 替代屏幕”。问题 "what is alternative screen and how to use it" 是一个 不同的 问题,该问题反过来已经在其他地方发布了答案。谢谢:)
您应该使用备用屏幕终端功能。看
Using the "alternate screen" in a bash script
对“如何使用备用屏幕”的回答:
这个例子应该说明:
#!/bin/sh
: <<desc
Shows the top of /etc/passwd on the terminal for 1 second
and then restores the terminal to exactly how it was
desc
tput smcup #save previous state
head -n$(tput lines) /etc/passwd #get a screenful of lines
sleep 1
tput rmcup #restore previous state
这仅适用于具有 smcup
和 rmcup
功能的终端(例如,不适用于 Linux 控制台(=虚拟控制台))。
可以使用 infocmp
.
检查终端功能
在不支持它的终端上,我的 tput smcup
只是 return 退出状态 1 而没有输出转义序列。
注:
如果您打算重定向输出,您可能希望将转义序列直接写入 /dev/tty
,以免弄脏您的 stdout
:
exec 3>&1 #save old stdout
exec 1>/dev/tty #write directly to terminal by default
#...
cat /etc/passwd >&3 #write actual intended output to the original stdout
#...
我正在编写自动化脚本 (perl
/bash
)。他们中的许多人受益于一些基本的终端 GUI。我想我会使用标准 ANSI
序列来进行基本绘图。在终端绘图之前,我做了 clear
但这样做我丢失了一些终端命令历史记录。当我的程序存在时,我希望能够恢复终端命令历史记录。许多终端程序(例如 less
、man
、vim
、htop
、nmon
、whiptail
、dialog
等)完全符合那。所有这些都恢复终端 window 将用户带回调用程序之前的位置,并包含之前执行的所有命令历史记录。
老实说,我什至不知道从哪里开始搜索。它是来自 curses
库的命令吗?它是 ANSI
转义序列吗?我应该弄乱 tty
吗?我被卡住了,任何指示都会很有帮助。
编辑:我想澄清一下,我并不是真的在问 "how to use the alternative screen"。我正在寻找一种方法来保存终端命令历史记录。我的问题的一个可能答案是“使用 替代屏幕”。问题 "what is alternative screen and how to use it" 是一个 不同的 问题,该问题反过来已经在其他地方发布了答案。谢谢:)
您应该使用备用屏幕终端功能。看 Using the "alternate screen" in a bash script
对“如何使用备用屏幕”的回答:
这个例子应该说明:
#!/bin/sh
: <<desc
Shows the top of /etc/passwd on the terminal for 1 second
and then restores the terminal to exactly how it was
desc
tput smcup #save previous state
head -n$(tput lines) /etc/passwd #get a screenful of lines
sleep 1
tput rmcup #restore previous state
这仅适用于具有 smcup
和 rmcup
功能的终端(例如,不适用于 Linux 控制台(=虚拟控制台))。
可以使用 infocmp
.
在不支持它的终端上,我的 tput smcup
只是 return 退出状态 1 而没有输出转义序列。
注:
如果您打算重定向输出,您可能希望将转义序列直接写入 /dev/tty
,以免弄脏您的 stdout
:
exec 3>&1 #save old stdout
exec 1>/dev/tty #write directly to terminal by default
#...
cat /etc/passwd >&3 #write actual intended output to the original stdout
#...