从占据整个终端的 bash 脚本中,如何恢复之前的会话?
我知道一些程序是这样工作的:
- 护林员
- 维姆
- 男人
- 纳米
常见的模式是:程序占用整个终端,然后在退出时恢复所有内容,即输入的命令和打印的输出。
答案1
您应该使用 terminfocup
选项。这可以通过 shell 使用命令来完成tput
。
例如
tput smcup
clear
echo hello
echo there
read
tput rmcup
这将清除屏幕,打印两行,等待您按 RETURN,然后将屏幕恢复到之前的位置。
terminfo
当然,这需要您的终端定义来支持这一点。并非所有终端都具备该功能。
答案2
在 bash 脚本中使用时,使用clear
或会弄乱原始屏幕的历史记录。tput clear
屏幕仍然存在,但只是可见的屏幕。所有的历史都消失了。我花了很长时间才发现clear
必须将其替换为tput cup 0 0
(在我的情况下通过将光标定位在左上角来工作)。
tput smcup
tput cup 0 0 # position cursor top left, simulate clear
...script
tput rmcup