在屏幕内滚动,或暂停输出

在屏幕内滚动,或暂停输出

我用屏幕在管理我工作的服务器时执行命令行任务。我通常运行小型命令(主要是文件系统任务),但有时我运行更广泛的任务(例如 DBA)。

输出这些任务对我来说很重要。由于我使用 Ubuntu 和 OS X(都是终端 Windows)来执行任务,但我需要使用屏幕,因此滚动不可用,因此任何长输出(想想来自选择的 500 行表)对我来说都是不可见的。鼠标滚轮是不可能的。

当我说“滚动对我来说是不可见的”时,我的意思是:

在 Mac OS X 中使用屏幕时位于顶部,同时滚动

我考虑了两个选择:

  1. 暂停(思考分页)某个命令的输出。当输出开始时,它会让我读取正在发生的事情,然后我按“Enter”,然后输出继续,直到没有更多内容可显示。

  2. 在屏幕内滚动。但我不知道这是否可能。

当然,我不知道这些选项是否真的可能的。如果是的话,如何实现它们?其他替代方案将受到好评。

答案1

Screen 有自己的滚动缓冲区,因为它是终端多路复用器并且必须处理一些缓冲区。

也许有更好的方法,但我习惯使用“复制模式”滚动(您可以使用屏幕本身复制文本,尽管这也需要粘贴命令):

  • 点击屏幕前缀组合(默认为C-a/ control+ ),然后点击或。AEscape[

  • 使用箭头键(和)上下移动

  • 完成后,按除箭头键、数字和某些字母之外的任意键即可返回到滚动缓冲区的末尾。大多数人使用qEscape

(如果您不退出,而是按EnterSpace然后移动光标,您将开始选择要复制的文本,然后再次按Enter或将复制它。然后您可以粘贴,然后再粘贴。)SpaceC-a]

当然,您始终可以使用moreless,这两个常用的寻呼机,这对于某些命令来说可能就足够了。

答案2

screen按照指出使用缓冲区通过njsg是一个很好的解决方案。您还可以在屏幕内的 xterm termcap 信息中禁用备用文本缓冲区。禁用后,您可以使用滚动条(和鼠标滚轮)上下滚动。

将其添加到您的~/.screenrc.

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@

您可以阅读更多讨论这里

答案3

所有这些答案都解决了如何在屏幕会话中导航,但是screen 命令中有一个内置功能,可以将所有内容存储在文件中-L根据手册的说法:

-L 告诉 screen 打开 Windows 的自动输出日志记录。

所以你可以这样做:

screen -L -S testscreen

它将在当前目录中创建一个文件,文件名screenlog.##该屏幕的从 0 开始的数字。

这有很多优点,对我来说最重要的是:

  1. 记录我所做的事情,因为我可以将日志文件保存在项目文件夹中以供将来参考。
  2. 您可以非主动和被动地监控该过程:
    • 用于tail -F实时监控进度,无需连接到屏幕。
    • 用于grep检查日志中的特定术语并生成通知(电子邮件、弹出窗口、VoIP 等)。这可以应用于多个屏幕,而无需您主动查看它们。

答案4

我已经成功通过将内容传输到 来获得基本分页more,例如:

ls -l | more

或者,如果您想要语法突出显示等用例的颜色输出,您可以使用

ls -l --color=always | more

这导致我可以轻松地一次浏览一个屏幕的输出。我还没有尝试过 @uther 的修改,~/.screenrc但当鼠标可用时,这似乎确实是更可取的持久解决方案。

要尝试一下,您可以访问这个 BusyBox 模拟器进而...

cd ~/bin
ls -l --color=always | more

使用空格键翻阅ls -l命令的结果,或使用 Enter 键逐行浏览结果。

相关内容