如何将命令输出直接复制到剪贴板?

832

当我在终端中使用命令时,如何将其输出导入到剪贴板并在需要时粘贴回来?例如:

cat file | clipboard

可能是管道到/从剪贴板的重复问题。 - Ciro Santilli OurBigBook.com
可能是 http://superuser.com/questions/104981/linux-shell-copy-output-into-clipboard-w-o-using-the-mouse 的重复问题。 - Champ
我刚刚提了一个相关的问题,因为我无法在从Windows的Git Bash登录到Ubuntu时让xclip工作:https://stackoverflow.com/q/60117294/470749 - Ryan
2
将文件内容保存到剪贴板。 apt install xclipcat file | xclip -sel clip - EsmaeelE
25个回答

6

当我需要复制我的ssh密钥时,我通常运行以下命令:

cat ~/.ssh/id_rsa.pub | pbcopy

在任何地方,按下cmd+vctrl+v


我也发现在OS X上这种方式更自然,即被赞同的方法:pbcopy < command对我不起作用。 - galactica

5

在 Wayland 上,xcopy 似乎不起作用,请使用 wl-clipboard 替代。 例如,在 Fedora 上:

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

5

对于那些在Windows系统上安装了bash(称为Windows子系统Linux(WSL))的用户,尝试使用xclip会出现错误:

Error: Can't open display: (null)

相反,记住 Linux 子系统可以访问 Windows 可执行文件。可以像这样使用 clip.exe:
echo hello | clip.exe

这个功能允许你使用粘贴命令(ctrl-v)。


1
请注意,如果在Windows上安装了xserver(例如vcxsvr或xming),并且显示器已经启动并且正在运行xclipboard,那么您实际上可以无缝地使用xclip。 - user3434588

5
我制作了一个小工具,提供类似的功能,而不使用xclip或者xsel。将stdout复制到剪贴板中,可以在终端中再次粘贴。请参见:https://sourceforge.net/projects/commandlinecopypaste/ 请注意,此工具不需要X会话。剪贴板可以在终端中使用,不必通过Ctrl+V或者中键单击粘贴到其他X窗口中。

4

我来自一个简化版的KDE背景,没有访问xclip、xsel或其他高级功能的权限。更糟糕的是,我只有TCSH Konsole。

要求:qdbus、klipper、xargs、bash

创建一个名为foo.sh的bash可执行文件。

#!/bin/bash
qdbus org.kde.klipper /klipper setClipboardContents "$1" > /dev/null

注意: 这需要使用bash,因为TCSH不支持多行参数。

.cshrc中添加TCSH别名。

alias clipboard xargs -0 /path/to/foo

说明:

xargs -0 将标准输入管道传递到单个参数中。该参数被传递给bash可执行文件,它使用qdbusklipper发送“复制到剪贴板”的请求。对/dev/null的管道是为了不将qdbus返回的换行字符打印到控制台上。

示例用法:

ls | clipboard

这将当前文件夹的内容复制到剪贴板中。

注意:仅作为管道使用。如果需要复制参数,请直接使用bash可执行文件。


3
在安装了xclip的Linux系统中:
xclip -selection clipboard < file

2

对于使用Arch Linux的用户,这里有一个很好的解决方案。使用pacman安装xsel,如下所示:

sudo pacman -S xsel

在~/.bashrc文件中创建别名,例如:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

重新加载您的终端,请使用以下命令:

source

source ~/.bashrc

请按照上面提到的使用它:
cat your_file.txt | pbcopy

提醒一下,良好的做法是将所有别名存储在~/.aliases文件中,并在.bashrc文件中调用它。


2

2021答案

如果你像我一样在寻找“如何将一个命令的输出复制到剪贴板以供下一个命令使用”的答案,那么这个解决方案对于Mac用户来说非常有效。

例如,我想简单地复制$ which postgres的输出,以便我可以直接粘贴到我的下一个命令中。

我通过将第一个命令$ which postgres$ pbcopy进行管道传输来解决了这个问题。

which postgres | pbcopy

然后我可以简单地按下 command + V,这将产生我想要的结果:

/usr/local/bin/postgres

2

根据之前的帖子,我得到了以下轻量级别名解决方案,可以添加到.bashrc中:

if [ -n "$(type -P xclip)" ]
then
  alias xclip='xclip -selection clipboard'
  alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out'
fi

示例:

# Copy
$ date | clipboard
Sat Dec 29 14:12:57 PST 2018

# Paste
$ date
Sat Dec 29 14:12:57 PST 2018

# Chain
$ date | clipboard | wc
   1       6      29

1

只是为了涵盖一个边缘情况:),因为问题标题询问(至少现在)如何直接将命令输出复制到剪贴板。

通常情况下,我发现在执行命令后复制其输出很有用,而我不想或无法再次执行该命令。

对于这种情况,我们可以使用gdm或类似的鼠标实用程序,并使用鼠标进行选择。apt-get install gdm,然后使用右键单击或Cntrl + Shift + c和Cntrl + Shift + v组合键在终端中进行复制和粘贴。

或者,这是我首选的方法(因为当您在多个并排的窗格中具有一个窗格内无法正确选择时,鼠标无法正常选择,您需要选择多行时),我们可以使用tmux将内容复制到tmux缓冲区中,使用标准的[,空格,移动以选择,输入或选择一块代码。当您在cli多路复用器(如tmux)的一个窗格中,并且您需要选择一堆文本但不包括行号时,这特别有用(我的vim设置呈现行号)

之后,您可以使用以下命令:

tmux save-buffer - | xclip -i

你当然可以将其别名为自己喜欢的名称或者直接在tmux配置文件中绑定。这只是为了给你一个概念性的答案,以涵盖不能再次执行命令时的边缘情况。如果需要更具体的代码示例,请告诉我。祝好!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接