Bash 终端程序如何向屏幕添加滚动?

Bash 终端程序如何向屏幕添加滚动?,bash,shell,terminal,less-unix,Bash,Shell,Terminal,Less Unix,程序less、more或vi如何在不清除屏幕的情况下在终端屏幕上添加滚动部分,以及之后它如何消失 如果我是从脚本运行它,或者脚本退出,有没有办法在特定时间内运行得更少?首先,这与bash或您正在使用的任何shell无关。less命令本身处理屏幕更新;它可以从任何shell或任何其他程序运行 您的终端仿真器支持转义序列。写入可打印字符(字母、数字等)会导致显示这些字符。写入转义序列会导致其他各种情况发生:移动光标、清除当前行、清除屏幕等 termcap或termfo和curses或ncurses软

程序less、more或vi如何在不清除屏幕的情况下在终端屏幕上添加滚动部分,以及之后它如何消失


如果我是从脚本运行它,或者脚本退出,有没有办法在特定时间内运行得更少?

首先,这与bash或您正在使用的任何shell无关。
less
命令本身处理屏幕更新;它可以从任何shell或任何其他程序运行

您的终端仿真器支持转义序列。写入可打印字符(字母、数字等)会导致显示这些字符。写入转义序列会导致其他各种情况发生:移动光标、清除当前行、清除屏幕等

termcap
termfo
curses
ncurses
软件包提供对这些转义序列的访问
less
vim
emacs
,通常使用
ncurses
来帮助管理屏幕

与您的问题相关的两个序列被termcap称为
ti
te
smcup
rmcup
smcup
序列使终端保存其当前状态(屏幕上显示的所有内容以及光标位置),然后切换到开始为空的辅助显示缓冲区。
rmcup
序列恢复保存的状态并返回主显示缓冲区。默认情况下,使用
ncurses
的程序将在进入时打印
smcup
序列,在退出时打印
rmcup
条目。这就是这些程序在终止时如何将终端窗口恢复到以前的状态

另外,如果我是从脚本运行它,是否有任何方法可以在特定时间内运行得更少,或者脚本退出的方法

我不认为有什么好方法可以做到这一点
less
是一个交互式程序;它通常仅在用户键入
q
或类似内容时终止。运行它一段特定的时间与它的设计目标背道而驰,作为一个用户,如果
less
在我使用它时被终止,我会很恼火


您可以使用
timeout
命令,但这会干扰
smcup
/
rmcup
机制,导致显示器可能损坏。可能有更好的方法来完成您要做的事情。

我只是想显示一条实时更新的消息,这样我就不需要每隔一秒左右刷新一次。不过现在没关系了,因为smcup和rmcup与我想做的事情配合得很好,我发现它们的tput命令非常有用。谢谢你的帮助。@Jidder:那么你应该问一下你到底想做什么;看见
watch
命令可能就是您要找的。我问了我想知道什么。我意识到我可能看起来没有。除了显示更新消息的最初问题外,我还(比消息更重要的是)想知道更少和类似的命令是如何工作的。