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

Aer*_*oss 525 ssh gnu-screen terminal putty scrolling

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

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

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

top 使用屏幕时,在 Mac OS X 中,滚动时

我在考虑两种选择:

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

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

当然,我不知道这些选项是否真的可行。如果是,如何实现?其他替代方案将受到欢迎。

njs*_*jsg 722

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

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

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

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

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

(如果不是qorEscape你点击EnterorReturn然后移动光标,你将选择要复制的文本,点击EnterReturn第二次将复制它。然后你可以粘贴,C-a然后是]。)

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

  • 滚动缓冲区似乎支持类似 vi 的命令:用于向上/向下滚动页面的 Cb 和 Cf。 (13认同)
  • 有什么办法翻页吗? (10认同)
  • 此外,按 q 退出复制模式而不复制任何内容(而且少按一个按钮)。这可能在 vi 解释中,但链接现在已断开。 (5认同)
  • 在复制模式下,我的 PageUp 和 PageDown 按钮工作。第一次按下只移动一行,但之后它会像正常一样翻页。 (5认同)
  • 同时按 [Esc] 也会退出复制模式。 (3认同)
  • 默认前缀组合是否更改?在 Ubuntu 16.04 上,`CA`/`Ca` 没有为我做任何事情...... (2认同)

Geo*_*e M 236

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

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

# Enable mouse scrolling and scroll bar history scrolling
termcapinfo xterm* ti@:te@
Run Code Online (Sandbox Code Playgroud)

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

  • 仅此提示就让我重新考虑使用屏幕... (14认同)
  • 只为您提供自启动以来的输出 `screen` - 即,重新附加到其他地方意味着您无法向上滚动并查看之前发生的事情。但是您仍然可以使用已接受答案中的解决方案检索较早的输出 - 然后您可以再次使用鼠标滚轮。 (12认同)
  • +1 比公认的解决方案更优雅。 (11认同)
  • 使用它,Linux 终端的典型快捷键(shift+pg up/down home/end)也可以使用,谢谢。 (4认同)
  • 通过键入 Ctrl+A、:、键入“scrollback 10000”或您想要的任何数值来设置回滚限制 (3认同)
  • 免责声明:我们不一直这样做的原因是:这会将屏幕历史记录保留在本地终端的滚动缓冲区内。大多数终端会将其回滚缓冲区转储到磁盘。如果您打开许多快速滚动终端,每分钟可能超过一百兆字节,您会发现本地计算机上的磁盘很快就耗尽了。 (3认同)

Meh*_*ian 47

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

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

所以你可以这样做:

screen -L -S testscreen
Run Code Online (Sandbox Code Playgroud)

它会创建当前目录下的一个文件,名称为screenlog.#其中#是该屏幕从0开始的数字。

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

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

  • 只是想添加更多,`screenlog.#`是在你执行`screen`命令的同一个文件夹中生成的 (3认同)
  • 我不知道 `-L` 屏幕标志,这非常有用!+1 (2认同)

小智 8

如果您没有清楚结帐

/sf/ask/1294245151/

尝试Control+ A,然后Escape

然后使用Up,Down或进行导航PgUp PgDown

Escape退出该模式。

否则https://unix.stackexchange.com/a/40243/318478

回答在上面!简单解释一下一切。
命令可能不清楚!好吧,我一开始就错过了。看看关于如何复制的部分!这很酷!


Mic*_*gan 5

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

ls -l | more
Run Code Online (Sandbox Code Playgroud)

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

ls -l --color=always | more
Run Code Online (Sandbox Code Playgroud)

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

要尝试一下,您可以转到此 BusyBox 模拟器,然后...

cd ~/bin
ls -l --color=always | more
Run Code Online (Sandbox Code Playgroud)

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