几个 *NIX 命令,例如screen
、和其他命令man
,vim
在 shell 环境中创建临时画布/屏幕/覆盖。当此类程序执行时,它们会覆盖或隐藏之前在终端中显示的任何内容——几乎就像终端窗口中的“全屏”模式一样。然而,当它们终止时,它们会显示或恢复之前在终端上的任何内容。
在下面的示例中,我在屏幕上创建了一些填充文本,然后调用man bash
. 手册页打开并覆盖终端显示上的所有其他字符。当我关闭手册页时,被掩盖的字符再次显示出来。
前
当示例全屏程序正在运行时
后
我希望写入 stdout/stderr 的程序可以完成第一步(用程序特定的内容替换终端的内容),但是它会产生大量的文本,我可以滚动浏览,因此不能这样做第二步:恢复终端内容。这意味着程序要么以某种方式记住屏幕的先前内容并重新输出它们(我对此表示怀疑?),要么它在终端中创建某种子窗口,而其他东西则跟踪终端的先前内容.
我的问题
如何在我自己的程序和/或脚本中完成该行为?
也许我应该使用 curses/ncurses、tput、termcap/terminfo 或 ANSI 转义序列?
更新:
这个修改后的问题与https://unix.stackexchange.com/questions/27941/show-output-on-another-screen-and-return-to-normal-when-done基本相同。(尽管进行了大量搜索,但当我写下这个问题时,我还没有找到它。)不同之处在于我的问题更笼统(任何语言),而这个问题是特定于 Bash 的。这两个问题的答案基本相同。如果它与另一个网站上的问题过于相似,请随时在此处关闭它。