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

时间:2011-02-27 02:10:46

标签: linux shell unix terminal clipboard

如何在使用终端时将命令输出传输到剪贴板并将其粘贴回来?例如:

cat file | clipboard

22 个答案:

答案 0 :(得分:501)

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

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

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

答案 1 :(得分:143)

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

答案 2 :(得分:45)

我已经为Linux / OSX / Cygwin创建了一个类似于其他一些工具的工具,但有些独特。我称之为cbit can be found in this github gist

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

的Linux

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}

MACOS

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}

Cygwin的

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}

注意:我原本打算在我对Bob Enohp's answer的评论中提到这一点。但后来我意识到我应该向我的要点添加一个自述文件。由于gist编辑器没有提供Markdown预览,所以我在这里使用了答案框,在复制/粘贴到我的想法后,#34;我不妨提交答案。"

cb

防漏T恤到剪贴板

此脚本以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

答案 3 :(得分:42)

我编写了这个小脚本,可以从复制/粘贴命令中获取猜测。

该脚本的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

答案 4 :(得分:20)

将此添加到您的~/.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

答案 5 :(得分:7)

我正在使用Parcellite和 <table> <tbody> <tr> <td> First element column 1 </td> <td> First element column 2 </td> <td> First element column 3 </td> </tr> <tr> <td> Second element column 1 </td> <td> Second element column 2 </td> <td> Second element column 3 </td> </tr> </tbody> </table>将最后一次提交邮件从 String dateString = "2016-04-13 22:00:01.0"; SimpleDateFormat formatterFullMilliseconds = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss.SSS" ); Date dateFromDateString = formatterFullMilliseconds.parse( dateString ); System.out.println( dateFromDateString ); // Output: Wed Apr 13 22:00:01 CEST 2016 复制到我的剪贴板管理器(由于某种原因SimpleDateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); System.out.println( formatter.format( dateFromDateString ) ); // 2016-04-13 22:00:01 System.out.println( formatter.format( new Date() ) ); // 2016-04-14 15:29:04 不起作用):

xsel

答案 6 :(得分:6)

Linux和Windows(WSL)

在使用 Linux的Windows子系统(例如WSL上的Ubuntu / Debian)时,xclip解决方案将无法使用。相反,您需要使用clip.exepowershell.exe复制并粘贴到Windows剪贴板中。

.bashrc

此解决方案可在基于“真实” Linux的系统(即Ubuntu,Debian)以及WSL系统上使用。只需将以下代码放入您的.bashrc

if grep -q -i microsoft /proc/version; then
    # on WSL
    alias copy="clip.exe"
    alias paste="powershell.exe Get-Clipboard"
else
    # on "normal" linux
    alias copy="xclip -sel clip"
    alias paste="xclip -sel clip -o"
fi

工作方式

文件/proc/version包含有关当前正在运行的OS的信息。当系统以WSL模式运行时,此文件还包含字符串Microsoft,该字符串由grep检查。

用法

要复制:

cat file | copy

并粘贴:

paste > new_file

答案 7 :(得分:5)

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

从Windows 7+命令提示符:

ssh user@server cat /etc/passwd | clip

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

(该命令需要为密钥运行Pageant,否则它会要求您输入密码。)

答案 8 :(得分:4)

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

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

$ pwd | pbcopy

将剪贴板中的内容用作

$ cd $(pbpaste)

答案 9 :(得分:3)

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

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

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

答案 10 :(得分:3)

在安装了xclip的Linux中:

  

xclip -selection clipboard&lt;文件

答案 11 :(得分:3)

在Wayland xcopy上似乎不起作用,请改用wl-clipboard。 例如在浅顶软呢帽上

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

答案 12 :(得分:2)

2021 答案

如果您正在寻找问题的答案,“如何将一个命令的输出复制到剪贴板以用于下一个命令?”像我一样,那么这个解决方案对于 Mac 用户来说效果很好。

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

我通过将我的第一个命令 $ which postgres$ pbcopy 一起传递来解决了这个问题。

which postgres | pbcopy

然后我可以简单地 command + V 产生我想要的结果:

/usr/local/bin/postgres

答案 13 :(得分:1)

这是Arch Linux 用户的绝佳解决方案。使用 pacman 安装 xsel,例如:

sudo pacman -S xsel

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

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

使用源重新加载您的终端:

source ~/.bashrc

像上面提到的那样使用它:

cat your_file.txt | pbcopy

仅供参考,在 ~/.aliases 中设置所有别名并在 .bashrc 文件中调用它的良好做法

答案 14 :(得分:1)

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

cat ~/.ssh/id_rsa.pub | pbcopy

ctrl+v在其他任何地方。

答案 15 :(得分:1)

ma​​cOS:

pbcopy < your_command_which_gives_output

WSL/GNU/Linux(需要 xclip 包)

xclip -sel clip < your_command_which_gives_output

Windows 上的 Git Bash:

your_command_which_gives_output | clip

答案 16 :(得分:0)

这里有两个简单的解决方案,每个方法只有两行代码!

无需安装额外的软件(后者可能带有大量依赖项,其中一些存在潜在的安全问题)

注意:第二种方法在 Debian 中使用 nano 编辑器。

第一种方法:

  1. app.get("/", (req, res) => { console.log('This is not reached') // res.redirect(`${req.protocol}://${req.get('host')}/accounts/dashboard`); // res.sendFile(path.join(__dirname + '/views/landing/index.html')); }); // other routes under here
    注意:在任何带有前导注释符号 sudo printf "\n#$(date)" >> /path/intended_file 的行之前不会损坏任何文件。
  2. 用编辑器打开文件 # 然后将日期复制到编辑器内的剪贴板并将其粘贴到任何地方。

第二种方法

  1. 将位于磁盘任意位置的 sudo gedit /path/intended_file 文件的内容写入 uniqueFile 文件:
    delete.txt
  2. 用文本编辑器打开文件 sudo find / -iname 'uniqueFile' >> delete.txt 并将(Ctrl-C)突出显示的所需长长路径从编辑器复制到剪贴板。或者您也可以使用终端 nano 编辑器(虽然不支持“标准”Ctrl-C)。
  3. 可选的附加步骤:
    如果 gedit delete.txt 已经是您的个人日志文件:
    delete.txt 要么 rm delete.txt

答案 17 :(得分:0)

使用 sudo 权限:

echo '#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
data = ""
for i in sys.stdin:
        data = data + i
r.clipboard_append(data)
r.update()
r.destroy()' | sudo tee /usr/bin/copy > /dev/null
sudo chmod +x /usr/bin/copy

或者没有 sudo 权限(仅适用于一个用户):

echo '#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from tkinter import Tk
r = Tk()
r.withdraw()
r.clipboard_clear()
data = ""
for i in sys.stdin:
        data = data + i
r.clipboard_append(data)
r.update()
r.destroy()' > ~/.local/bin/copy
chmod +x ~/.local/bin/copy

用法:

echo "hi" | copy

答案 18 :(得分:0)

仅涉及一个极端情况:),并且由于问题标题询问(至少现在是这样),因此如何将命令的输出直接复制到剪贴板。

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

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

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

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

tmux保存缓冲区-| xclip -i

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

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

欢呼

答案 19 :(得分:0)

我来自KDE精简的背景,无法访问xclipxsel或其他奇特的东西。我有TCSH Konsole,让事情变得更糟。

需求:qdbus klipper xargs bash

创建bash可执行文件foo.sh

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

注意:由于TCSH不支持多行参数,因此需要进行重击。

后接.cshrc中的TCSH别名。

alias clipboard xargs -0 /path/to/foo

说明:

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

示例用法:

ls | clipboard

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

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

答案 20 :(得分:0)

根据以前的帖子,我得出了以下可以添加到.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

答案 21 :(得分:0)

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

Error: Can't open display: (null)

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

echo hello | clip.exe

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