如何将GNU屏幕复制缓冲区复制到剪贴板?


73

使用GNU Screen时,我们可以使用以下命令使用回滚缓冲区(也称为“复制模式”)Ctrl+a+[

在这里,我们可以通过选择文本并再次按将文本复制到复制缓冲区spacespace

有什么方法可以将文本从屏幕复制缓冲区复制到X剪贴板吗?

就我而言,我将Ubuntu 12.04与gnome和Xorg结合使用。

Answers:


45

您可以使用CLI剪贴板工具xsel或或pbpaste和该cat实用程序从STDIN中获取内容。在Linux上的步骤xsel如下:

  1. 将文本从屏幕会话复制到GNU屏幕的复制缓冲区中。
  2. 在屏幕上运行以下命令: cat | xsel -b
  3. 如果xsel没有报告任何错误,现在将屏幕的复制缓冲区转储到STDIN:Ctrl+a+]
  4. 发送EOFcat终止它:Ctrl+d

此时,屏幕复制缓冲区的内容应该在剪贴板中。

编辑:与所有X程序一样,xsel需要知道如何联系X服务器才能访问剪贴板。您应该DISPLAY适当设置环境变量。


4
当心,如果您不知道自己在做什么(像我自己一样)!cat | xsel -b当我从外壳运行时,执行了我的全部历史记录。
yekta

@yekta没有理由应该这样做。您的Shell在上述4个步骤中的什么时候开始执行事情?您是否以某种方式杀死了该cat命令(^C也许带有),因此在转储复制缓冲区时该命令不接受输入?如果我们能解决这个问题,也许您可​​以删除您的弃权票。
bonsaiviking

2
@yekta是的,要使用xsel,您需要具有带剪贴板的X显示器,并将DISPLAY环境变量设置为它。大多数终端仿真器都会对此进行设置ssh -X。由于未设置,因此xsel在接受输入之前会失败,因此管道将退出,并且屏幕缓冲区中的其余“按键”都将进入您的shell。
bonsaiviking

3
catcat | xsel -b是连接一个可爱的方式xsel'输入s到一个配管(而不是一个tty)和触发xsel的‘输入’模式; 但xsel具有-i用于显式触发输入模式的标志。因此xsel -bi可能更可取cat | xsel -b
丹尼尔·瓦格纳

2
我发现这样做的手动方式较少。请参考下面我的回答。
kungfuspider 2016年

13

此答案适用于OSX。

使用复制模式将所需的文本复制到GNU屏幕粘贴缓冲区后,请执行以下操作:

  1. 在任何屏幕窗口中,键入pbcopy <enter>
  2. 然后使用GNU屏幕将文本粘贴到终端中 粘贴命令Ctrl-a ]除非您已更改转义键)。
  3. 如果文本不以换行符结尾,请按 <enter>插入一个。
  4. 最后按Ctrl-d造成pbcopy将文本推送到系统剪贴板。

然后,您可以照常使用Command-v或等效菜单选项将文本粘贴到OS X中的其他位置。


13

有一种更简单,更省力的方法来执行此操作。在屏幕的.rc文件中,添加以下行:

bindkey -m ' ' eval 'stuff \040' 'writebuf' 'exec sh -c "/usr/bin/pbcopy < /tmp/screen-exchange"'

如何使用复制功能:

  1. screen -c path/to/screen/config.rc
  2. 按Ctrl + A,然后按Esc键进入复制模式。
  3. 向上滚动文本缓冲区,找到要保留开始标记进行复制的位置,然后按一下空格。
  4. 向下滚动并选择要复制的文本。完成后,再次按空格键。
  5. 文本现在将在剪贴板中。

编辑:在没有pbcopy但带有clipit的Linux上,您可以使用以下方法:

bindkey -m''eval'材料\ 040''writebuf''exec sh -c“ / bin / cat / tmp / screen-exchange | / bin / clipit”'


Debian中有类似的方法吗?喜欢简单。
Nate Ritter

我正在从Windows使用腻子,并使用屏幕登录到Linux。但是在我正在使用的Linux上没有pbcopy。在这里我该怎么做才能将文本复制到剪贴板上?
Mithun B '18年

1
通过使用clipit,在debian中也可以做到这一点。sh -c“ / tmp / screen-exchange | clipit”
Strudle

在ubuntu 18.04.4上,我必须更改/bid/clipit为,/usr/bin/cliptit并且必须安装libcanberra-gtk-module
Olian04年

11

该答案仅适用于最终目标是立即粘贴复制的缓冲区内容的情况。

最简单的方法是将屏幕分为两个区域。您可以点击CTRL+,a然后点击|“这不是i。这是键盘上的PIPE标志'

点击CTRL+,a然后TAB切换到第二个区域,CTRL+,a然后在第二个区域c中创建一个新会话。

如果要从nano复制并粘贴到终端,请在nano的左侧区域中打开文件,按CTRL+a然后ESC,滚动到复制位置的起点并点击SPACE,通过滚动到终点选择文本并点击SPACE再次标记副本。

现在,您所要做的就是按CTRL+a然后TAB切换到右侧的区域并按CTRL+a然后]

您的文本将被写到命令行。请注意,如果您想直接写入文件,也可以检查硬拷贝选项。


6
这是有关如何使用复印模式的说明。OP已经知道如何使用复制模式:问题是如何将数据从复制模式缓冲区移至系统剪贴板。这不是所问问题的答案。
Benubird

@Benubird-我知道。但是我给了他另一个选择,让我到达他认为需要去的地方,即复制粘贴。帮助了某人!
CoderX

4

由于似乎没有人直接回答这个问题:

将所需的输出复制到缓冲区后,您需要

  1. 用新文件打开文本编辑器,即 vim somefile.txt
  2. 进入编辑模式,即i在vim中
  3. Ctrl + a然后按]将转储刚填充到文本编辑器中的缓冲区的内容

ta-da!


这真太了不起了!您是如何知道的?

@Ray skillz bro
CpILL

0

如果您当前已连接到服务器,请退出ssh终端会话。

如果在Mac OS上使用XQuartz,在服务器上使用xsel。您应该通过在xQuartz应用程序菜单中选择“首选项”来更新XQuartz粘贴板设置。

XQuartz设置:

enter image description here

ssh进入远程机器并尝试运行:

xsel -p <<<"THIS IS A TEST".

按cmd + v,应输出“这是测试”。


-1

如果您只想复制一点信息,请用鼠标将其突出显示,然后将其粘贴到所需的位置。

如果您想获取大量信息,则可以将屏幕会话记录到文件中,然后可以从文件中复制或清理一下,然后将其用于操作说明


我试图避免使用鼠标来提高工作流程的速度,通常情况下,信息不是太多。感谢你的回答!
塞缪尔GP

好。屏幕中的复制/粘贴缓冲区仅在屏幕窗口之间。因此,您可以拥有另一个窗口,然后将副本粘贴到另一个窗口或粘贴到文件中。
约翰,

在某些情况下,将整个会话记录到文件似乎是最简单,最好的方法。知道如何做会有所帮助。
mivk

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.