在屏幕内滚动或暂停输出


381

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

这些任务的输出对我很重要。由于我在任务中使用Ubuntu和OS X(均为Terminal Windows),但仍需要使用屏幕,因此无法进行滚动,因此任何长输出(例如select中的500行表)对我来说都是不可见的。滚轮是不可能的。

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

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

我在考虑两种选择:

  1. 暂停(认为分页)某个命令的输出。输出开始时,它将让我阅读正在发生的事情,然后按“ Enter”,然后输出继续,直到没有其他显示。

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

当然,我不知道这些选择是否确实可行。如果是的话,如何实现它们?其他替代方案将广受欢迎。

Answers:


525

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

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

  • 点击屏幕前缀组合(默认为C-a/ control+ A),然后点击Escape

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

  • 完成后,按qEscape返回到滚动缓冲区的末尾。

(如果不是q或,Escape您先按EnterReturn再移动光标,则将选择要复制的文本,再按一次EnterReturn进行复制,则可以粘贴,C-a然后按]。)

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


5
同样,按q会退出复制模式而不复制任何内容(这是少按一次按钮)。这可能在vi的解释中,但现在链接已断开。
Nathanael Farley 2014年

3
同样,按[Esc]也会退出复印模式。
Sopalajo de Arrierez,2015年

7
任何方式向上翻页?
Sungguk Lim

10
滚动缓冲区似乎支持类似于vi的命令:Cb和Cf用于向上/向下滚动页面。
Touko

3
在复制模式下,我的PageUp和PageDown按钮可以工作。第一次按仅移动一行,但随后按正常方式翻页。
以利亚

170

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

将此添加到您的~/.screenrc

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

您可以在此处阅读更多讨论。


1
通过输入Ctrl + A 、:来设置回滚限制,键入“ scrollback 10000”或您想要的任何数值
lobi

2
使用此功能,Linux终端的典型快捷键(shift + pg上/下起始/结束)也可以使用,谢谢。
tokland

4
仅此一条技巧就使我重新考虑使用屏幕...
Fish Monitor

4
+1比公认的解决方案更优雅。
瑞安·约瑟菲

8
仅提供您screen自启动以来所提供的输出-即,重新连接到其他地方意味着您无法向上滚动并查看先前发生的情况。但您仍然可以使用接受的答案中的解决方案来检索较早的输出-然后可以再次使用鼠标滚轮。
菲尔(Phil)

28

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

-L告诉屏幕打开窗口的自动输出日志记录。

因此,您可以执行以下操作:

screen -L -S testscreen

它将创建一个文件,screenlog.#其中的#是该屏幕从0开始的数字。

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

  1. 自从我可以将日志文件保存在项目文件夹中以备将来参考以来,请保持记录我所做的事情。
  2. 您可以主动和被动地监视该过程:
    • 用于tailf实时监视进度,而无需附加在屏幕上。
    • 用于grep检查日志中的特定术语并产生通知(电子邮件,弹出窗口,voip等)。可以将其应用于多个屏幕,而无需主动查看它们。

1
我不知道-L屏幕标志,这非常有用!+1
克雷登斯

1
只是想增加更多的,screenlog.#是在你执行相同的文件夹中生成screen的命令
黎光维战

3

我成功地通过将内容传递到来获得基本的分页more

ls -l | more

或者,如果您希望针对语法突出显示等用例进行颜色输出,则可以使用

ls -l --color=always | more

这样的输出结果使我可以轻松地一次浏览一个屏幕。我没有尝试过@uther的修改,~/.screenrc但是当鼠标可用时,作为一种持久的解决方案,它似乎更可取。

要尝试此操作,可以转到此BusyBox模拟器,然后...

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.