less、more 或 vi 程序如何在不清除屏幕的情况下在终端屏幕上添加滚动部分,之后又如何消失?
如果我从脚本或脚本退出的方式运行它,是否有任何方法可以在特定时间内运行更少?
首先,这与 bash 或您使用的任何 shell 无关。该less
命令本身处理其屏幕更新;它可以从任何 shell 或任何其他程序运行。
您的终端仿真器支持转义序列。写入可打印字符(字母、数字等)会导致显示这些字符。编写转义序列会导致各种其他事情发生:移动光标、清除当前行、清除屏幕等。
termcap
orterminfo
和curses
orncurses
软件包提供对这些转义序列的访问。less
, vim
, emacs
, 通常用于ncurses
帮助管理屏幕。
与您的问题相关的两个序列由 termcapti
和terminfo 调用。该序列使终端保存其当前状态(屏幕上显示的所有内容以及光标位置),然后切换到从空开始的辅助显示缓冲区。该序列恢复保存的状态并返回到主显示缓冲区。默认情况下,使用的程序将在进入时打印序列,在退出时打印条目。这就是此类程序在终止时能够将终端窗口恢复到其先前状态的方式。te
smcup
rmcup
smcup
rmcup
ncurses
smcup
rmcup
如果我从脚本运行它或脚本退出的方式,还有什么方法可以在特定时间内运行更少
我认为没有真正好的方法可以做到这一点。less
是一个互动程序;它通常仅在用户键入q
或类似内容时终止。运行它一段特定的时间违背了它的设计目的,作为一个用户,如果less
我在使用它时被终止,我会很生气。
您可以使用该timeout
命令,但这会干扰smcup
/rmcup
机制,从而使您的显示可能损坏。可能有更好的方法来完成您正在尝试做的事情。