将GNU屏幕回滚缓冲区复制到文件(扩展的硬拷贝)


187

如何轻松地将GNU屏幕回滚缓冲区复制到文件?即,“硬拷贝”命令的更强大版本?

在GNU屏幕上,我可以使用“ Ctrl+ A Esc”输入回滚缓冲区。然后,我可以标记整个缓冲区,然后使用“ Ctrl+ A Ctrl+ ]”将其粘贴到Emacs缓冲区中,从而将其保存到文件中。

但是,这是乏味的。是否有一个Screen命令可以简单地将回滚缓冲区复制到文件中,就像“ hardcopy”在屏幕的可见部分那样?

Answers:


283

要将回滚缓冲区的全部内容写入文件,请键入

Ctrl+ A: 进入命令模式,然后

hardcopy -h <filename>

在较旧的版本中screen,如果您只是这样做hardcopy -h,它只会写入文件-h。此问题在版本4.2.0中已修复,因此hardcopy -h写入当前窗口号hardcopy.N在哪里N


1
请注意,该文件已保存在主目录中-至少对我而言是如此。谢谢您的回答,顺便说一句!
Ritesh

2
@allrite:它保存在$ PWD中(如果不提供完整路径),没有特殊行为。
Pushpendre 2014年

9
是的,但是它保存在您开始屏幕的$ PWD中。不在屏幕会话的$ PWD中。
seumasmac 2014年

7
请注意,如果您有一个较长的回滚缓冲区,但其中没有太多内容,则由于前几十行或几百行是空白并且内容在末尾,因此保存的文件可能显示为空。
特里·布朗

3
关于硬拷贝保存位置的进一步说明:如果cd到目录,然后用于screen -r重新连接到现有会话,则硬拷贝不会保存到屏幕内的活动目录或使用之前的目录中screen -r。我认为它会保存到您第一次启动屏幕会话时所在的目录中。您可以使用hardcopydir命令更改此设置。
马提亚斯·弗里普

24

Ctrl+ A :bufferfile /tmp/somefile.txt ENTER,然后按Ctrl+A >

这会将缓冲区的当前内容写入命名文件。


我试过了,“ ctrl-a>”说“什么都没发生”。第一步确实说“ Bufferfile现在是'/tmp/foo.txt'”,但似乎甚至没有创建该文件。

1
您确定已使用Ctrl + A [将某些内容复制到屏幕缓冲区吗?听起来您的缓冲区可能是空的-它不会复制整个回滚缓冲区,仅复制您使用Ctrl + A选择的部分[
Roshan

2
啊,我一直在寻找一种无需使用ctrl-a复制整个缓冲区的快捷方式[

12

TL; DR: ^A:writebuf <filename>

OP似乎希望使用一种方法来使用执行^ A [时获得的缓冲区的选定部分,使用空格作为开始和结束位置来选择文本,然后使用^ A]进行粘贴,然后保存结果选定的部分缓冲区到文件。

这工作:

^A:writebuf <filename>

注意:writebuf中有一个“ f”


1
不,不。OP希望保存整个缓冲区,而不仅仅是选定的部分。- OP

2
老鼠!错过了这么多
Kevin Mullet

4
这篇文章仍然有用。做得好。
贾斯汀E

1
我发现要在MacOSX版本的屏幕上执行此操作,我必须使用abolute路径(即:/Users/user1/path/to/file.txt)
jhrf

6

尝试hardcopy -h包括整个缓冲区。


2
这只是在文件〜/ -h中进行了硬拷贝

2
@barrycarter:在最新版本中可能已更改。从屏幕4.03.01开始,hardcopy -h写入hardcopy.N,其中N是当前窗口号。
基思·汤普森

4

这对我有用:

进入编辑模式(~)并输入:

:hardcopy -h buff_file

它创建了一个巨大的文件,其中98%是空的,但剩下的2%中我的日志完全存在。


-2

Ctrl+ A,,:然后发出命令“登录”。

或将其设置为您的.screenrc文件中的默认值,并将其设置为'deflog on'。


2
我认为这在我运行该命令后才开始记录所有内容。我不想记录所有内容(太冗长)。我只想将回滚缓冲区捕获为文件。

-3

DO Ctrl+ AH

这将当前屏幕变成硬拷贝文件,例如,为hardcopy.0屏幕0.这似乎是比去更快的方法Ctrl+ A:并键入硬拷贝命令。


3
不幸的是,这只是保存了屏幕的可见部分,而不是回滚缓冲区。
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.