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


526

使用终端时,如何将命令的输出传递到剪贴板中并粘贴回去?例如:

cat file | clipboard



我刚刚问了一个相关的问题,因为从Windows上的Git Bash登录Ubuntu时,我无法使xclip正常工作:stackoverflow.com/q/60117294/470749
Ryan

1
将文件内容保存到剪贴板。apt install xclipcat file | xclip -sel clip
EsmaeelE

Answers:


595

我一直想做到这一点,并找到了一种不错的简便方法。我写下了完整的程序,以防万一其他人需要它。

首先安装一个名为16 kB的程序xclip

sudo apt-get install xclip

然后,您可以通过管道将输出xclip复制到剪贴板:

cat file | xclip

要粘贴刚复制的文本,应使用:

xclip -o

为了简化生活,您可以像我一样在.bashrc文件中设置别名:

alias "c=xclip"
alias "v=xclip -o"

要查看它的用处,想象一下我想在一个新的终端窗口中打开当前路径(在某些系统上,可能有其他类似Ctrl+的方法T,但这只是出于说明目的):

Terminal 1:
pwd | c

Terminal 2:
cd `v`

注意` ` 周围v。它v首先作为命令执行,然后就地替换以cd供使用。

仅将内容复制到X剪贴板

cat file | xclip

如果要粘贴X应用程序以外的其他位置,请尝试以下一种方法:

cat file | xclip -selection clipboard

143
“ cat文件| xclip”仅将内容复制到“ X”剪贴板,如果您要粘贴“ X”应用程序以外的其他地方,请尝试以下操作:“ cat文件| xclip-选择剪贴板”
khotyn

5
您选择的手柄是否合适!
马特·乔纳

4
如果要删除换行符,以便可以直接粘贴和编辑“ pwd | c”的结果,则可以执行“ pwd | tr -d'\ n'| xclip -selection c”
Anake

12
还定义alias "cs=xclip -selection clipboard"alias "vs=xclip -o -selection clipboard"简化从系统剪贴板的复制/粘贴操作
Yibo Yang

1
我没有sudo访问权限且未安装xclip的解决方案呢?
DanGordon '16

178

在OS X上,使用pbcopy; pbpaste朝相反的方向前进。


13
ps!就像这样,例如:pbcopy < .ssh/id_rsa.pub
doublejosh,2011年

不适用于命令输出tho-例如pbcopy < git merge-base master some-branch
Ben

如果您使用的是tmux,除非您重新附加会话,否则它将无法正常工作:superuser.com/a/413233/146254
Atav32 2015年

1
如果已经使用cat,也可以使用cat:cat file.txt | pbcopy
rtrigoso

3
我知道此评论已有5年历史了,但如果将来有人偶然发现此问题,并与命令输出配合使用,请执行git merge-base master some-branch | pbcopy
山姆

62

我为Linux / OSX / Cygwin创建了一个工具,该工具与其他工具类似,但略有不同。我称之为它cb可以在github gist中找到它

在该要点中,我演示了如何使用Linux,macOS和Cygwin通过命令行进行复制和粘贴。

的Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

苹果系统

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

西格温

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

注意:我本来只是想在对Bob Enohp的回答的评论中提及这一点。但是后来我意识到我应该在自己的要旨中添加自述文件。由于要点编辑器不提供Markdown预览,因此我在此处使用了答案框,将其复制/粘贴到我的要点思想后,“我也可以提交答案。”

b

剪贴板防漏三通

该脚本的建模依据tee(请参阅参考资料man tee)。

就像普通的复制和粘贴命令一样,但是统一并且能够感知到何时希望将其链接

例子

复制

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017

# clipboard retained from the previous block
$ cb
Tue Jan 24 23:00:00 EST 2017
$ cb | cat
Tue Jan 24 23:00:00 EST 2017
$ cb > foo
$ cat foo
Tue Jan 24 23:00:00 EST 2017

链式

$ date | cb | tee updates.log
Tue Jan 24 23:11:11 EST 2017
$ cat updates.log
Tue Jan 24 23:11:11 EST 2017
# clipboard contains: Tue Jan 24 23:11:11 EST 2017

通过文件重定向复制

(按时间顺序,最后进行演示是有意义的)

# clipboard retained from the previous block
$ cb < foo
$ cb
Tue Jan 24 23:00:00 EST 2017
# note the minutes and seconds changed from 11 back to 00

这对我来说非常适合将命令输出复制到macOS终端上的剪贴板,谢谢!
Joshua Dyck

46

我写了这个小脚本,将猜测工作排除在复制/粘贴命令之外。

脚本的Linux版本依赖于系统中已安装的xclip。该脚本称为剪贴板。

#!/bin/bash
# Linux version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if command -v xclip 1>/dev/null; then
    if [[ -p /dev/stdin ]] ; then
        # stdin is a pipe
        # stdin -> clipboard
        xclip -i -selection clipboard
    else
        # stdin is not a pipe
        # clipboard -> stdout
        xclip -o -selection clipboard
    fi
else
    echo "Remember to install xclip"
fi

该脚本的OS X版本依赖于所有Mac上已预先安装的pbcopy和pbpaste。

#!/bin/bash
# OS X version
# Use this script to pipe in/out of the clipboard
#
# Usage: someapp | clipboard     # Pipe someapp's output into clipboard
#        clipboard | someapp     # Pipe clipboard's content into someapp
#

if [[ -p /dev/stdin ]] ; then
    # stdin is a pipe
    # stdin -> clipboard
    pbcopy
else
    # stdin is not a pipe
    # clipboard -> stdout
    pbpaste
fi

使用脚本非常简单,因为您可以clipboard像这两个示例所示那样简单地输入或输出。

$ cat file | clipboard

$ clipboard | less

3
我使用的名称pbcopy,并pbpaste在Linux上,因此适用于Linux和OS X.
StackedCrooked

要使脚本在ubuntu中全局工作,~/.scripts/clipboard 请执行chmod +x ~/.scripts/clipboard 以下操作:*将其保存在*使其对bash 可执行:*添加export PATH=$PATH:~/.scripts~/.bashrc fish 的末尾:*添加set PATH ~/.scripts $PATH~/.config/fish/fish.config 如果尚不存在任何文件或文件夹,则只需创建它们即可。
曲棍球2015年

2
您还可以将此脚本包装为一个函数clipboard(){ ... },并将其粘贴到.bashrc
Sebastian Nowak

这与我制作的非常相似,但是我允许像这样链接date | cb | tee -a updates.log。这会将date命令输出发送到剪贴板,并将其传递到tee -a命令,命令将命令输出附加到文件,然后传递给stdout。但这就像“ 剪贴板的防漏三通”,因为如果您这样做,date | cb您将不会获得任何输出。最后确实也cb > file.txt gist.github.com/RichardBronosky/...
布鲁诺Bronosky

一个建议-删除结尾的换行符,以避免在粘贴时执行命令(例如,如果复制粘贴路径)。为此,我将命令修改xclip -i -selection clipboardxargs echo -n | xclip -i -selection clipboard
Ivaylo Strandjev

23

将此添加到您的~/.bashrc

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'

现在剪辑p粘贴和c剪辑副本-但您也可以做一些更有趣的事情:

clipp | sed 's/^/    /' | cclip

↑使剪贴板缩进;适用于没有堆栈溢出{ }按钮的站点

您可以通过运行以下命令添加它:

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc

请举一个使用示例
Ulf Aslak

7

我正在使用Parcellite xsel并将上次提交消息从中复制git到剪贴板管理器中(由于某些原因xclip不起作用):

$ git log -1 --pretty=%B | xsel -i -b

7

在不使用外部工具的情况下,如果要连接到服务器视图SSH,这是一个相对简单的命令:

在Windows 7+命令提示符下:

ssh user@server cat /etc/passwd | clip

这会将远程文件的内容放入本地剪贴板。

(此命令要求运行Pageant作为密钥,否则它将要求您输入密码。)


1
@AfshinMoazami,标题和问题本身是通用的,只有标签会提示Unix系统,我的答案涵盖了当您尝试将日期从Unix服务器发送到Windows机器时的情况,这可能对将来的读者有用。
d.raev

1
受到支持是因为对只有Powershell才能在本地使用的Windows管理员有用(尽管现在LSW可以正常工作了,我可以直接从Powershell投入bash并在那里做我的* nixy事情)。
flith

它在DOS提示符下以及Windows 10上的git bash上工作,即echo Hello World | clip

5

对于Mac,这是使用命令行复制(从剪贴板)粘贴(从剪贴板)的示例方法

pwd命令结果复制到剪贴板为

$ pwd | pbcopy

将剪贴板中的内容用作

$ cd $(pbpaste)

3

我做了一个小的工具,提供了类似的功能,而没有使用xclip或xsel。stdout被复制到剪贴板,并可以再次粘贴到终端中。看到:

https://sourceforge.net/projects/commandlinecopypaste/

请注意,此工具不需要X会话。剪贴板只能在终端中使用,而不必通过Ctrl+V鼠标中键单击或粘贴到其他X窗口中。


3

在安装了xclip的Linux中:

xclip-选择剪贴板<文件


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

我来自一个剥离下来KDE背景,没有访问xclipxsel或其他花哨的东西。我有TCSH Konsole,让事情变得更糟。

要求: qdbus klipper xargs bash

创建一个bash可执行文件foo.sh

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

注意:由于TCSH不支持多行参数,因此必须使用bash。

之后是的TCSH别名.cshrc

alias clipboard xargs -0 /path/to/foo

说明:

xargs -0将stdin传递到单个参数中。此参数传递给bash可执行文件,该可执行文件发送一个“ klipper使用剪贴板复制”请求qdbus。管道/dev/null不打印返回qdbus到控制台的换行符。

用法示例:

ls | clipboard

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

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


1

我通常在必须复制我的命令时运行此命令ssh-key

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v 其他任何地方。



0

对于使用在其Windows系统(称为Windows子系统,Linux,WSL)上安装bash的用户,尝试使用xclip将给出错误:

Error: Can't open display: (null)

相反,回想一下Linux子系统可以访问Windows可执行文件。可以像这样使用clip.exe

echo hello | clip.exe

它允许您使用粘贴命令(ctrl-v)。


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

0

只是为了介绍一个极端情况:),并且因为问题标题询问(至少现在是这样),所以如何将命令的输出直接复制到剪贴板。

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

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

或者,这是我的首选方法(因为当您并排放置多个窗格并且需要选择多个行时,鼠标无法在一个窗格内正确选择),使用tmux,我们可以使用标准复制到tmux缓冲区中[,空格,移动选择,输入,或者您可以选择一个代码块。当您在诸如tmux之类的cli复用器的一个通道内并且需要选择一堆文本而不是行号时,这特别有用(我的vim设置会渲染行号)

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

tmux保存缓冲区-| xclip -i

当然,您可以将其别名为您喜欢的名称,也可以直接将其绑定到tmux配置文件中

这只是为了给您一个概念性的答案,以解决无法再次执行命令的情况。如果您需要更具体的代码示例,请告诉我

干杯

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.