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

Leg*_*end 477 unix linux shell terminal clipboard

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

cat file | clipboard
Run Code Online (Sandbox Code Playgroud)

Leg*_*end 547

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

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

sudo apt-get install xclip
Run Code Online (Sandbox Code Playgroud)

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

cat file | xclip
Run Code Online (Sandbox Code Playgroud)

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

xclip -o
Run Code Online (Sandbox Code Playgroud)

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

alias "c=xclip"
alias "v=xclip -o"
Run Code Online (Sandbox Code Playgroud)

为了看看它有多有用,想象一下我想在一个新的终端窗口中打开我当前的路径(在某些系统上可能还有其他方法可以像Ctrl+ 那样做T,但这只是为了说明目的):

Terminal 1:
pwd | c

Terminal 2:
cd `v`
Run Code Online (Sandbox Code Playgroud)

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

仅将内容复制到X剪贴板

cat file | xclip
Run Code Online (Sandbox Code Playgroud)

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

cat file | xclip -selection clipboard
Run Code Online (Sandbox Code Playgroud)

  • "cat file | xclip"只将内容复制到'X'剪贴板,如果你想粘贴"X"应用程序以外的其他地方,试试这个:"cat file | xclip -selection clipboard" (135认同)
  • 还定义`别名'cs = xclip -selection clipboard"`和`别名'vs = xclip -o -selection clipboard"`以便从系统剪贴板中复制/粘贴更容易 (12认同)
  • 您选择的手柄是合适的! (5认同)
  • 我不确定,但我收到以下错误 `Error: Can't open display: (null)` @Legend (5认同)
  • 如果要删除换行符,以便可以直接粘贴和编辑"pwd | c"的结果,可以执行"pwd | tr -d'\n'| xclip -selection c" (4认同)

Dav*_*ter 163

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

  • 使用它适合我的管道:pwd | pbcopy (31认同)
  • 我知道该评论已经有 5 年历史了,但万一将来有人偶然发现这一点,要与命令输出一起使用,请执行 `git merge-base master some-branch | pbcopy` (17认同)
  • Yups!对于ex:`pbcopy <.ssh/id_rsa.pub`就像这样 (9认同)
  • 如果您不想在复制内容的末尾添加换行符:`cat file | xargs 回声-n | pbcopy` (6认同)
  • 如果您已经使用过 cat,您也可以使用它:cat file.txt | PB复制 (3认同)
  • 不适用于命令输出 - 例如`pbcopy &lt; git merge-base master some-branch` (2认同)

Bru*_*sky 52

我已经为Linux/OSX/Cygwin创建了一个类似于其他一些工具但略微独特的工具.我称之为它cb,它可以在这个github gist中找到.

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

Linux的

_copy(){
    cat | xclip -selection clipboard
}

_paste(){
    xclip -selection clipboard -o
}
Run Code Online (Sandbox Code Playgroud)

苹果系统

_copy(){
    cat | pbcopy
}

_paste(){
    pbpaste
}
Run Code Online (Sandbox Code Playgroud)

Cygwin的

_copy(){
    cat > /dev/clipboard
}

_paste(){
    cat /dev/clipboard
}
Run Code Online (Sandbox Code Playgroud)

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

CB

防漏T恤到剪贴板

此脚本以tee(参见man tee)为模型.

它就像您的普通复制和粘贴命令,但统一并能够感知您何时希望它可链接

例子

复制

$ date | cb
# clipboard contains: Tue Jan 24 23:00:00 EST 2017
Run Code Online (Sandbox Code Playgroud)

# 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
Run Code Online (Sandbox Code Playgroud)

链接

$ 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
Run Code Online (Sandbox Code Playgroud)

通过文件重定向复制

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

# 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
Run Code Online (Sandbox Code Playgroud)


Bob*_*ohp 43

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

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

使用脚本非常简单,因为您只需管道输入或输出,clipboard如这两个示例所示.

$ cat file | clipboard

$ clipboard | less
Run Code Online (Sandbox Code Playgroud)

  • 我在Linux上使用名称`pbcopy`和`pbpaste`,因此它适用于Linux和OS X. (3认同)
  • 您还可以将此脚本包装为函数`clipboard(){...}`并将其粘贴到.bashrc中 (2认同)

use*_*552 22

将此添加到您的~/.bashrc:

# Now `cclip' copies and `clipp' pastes'
alias cclip='xclip -selection clipboard'
alias clipp='xclip -selection clipboard -o'
Run Code Online (Sandbox Code Playgroud)

现在剪辑p贴和c剪辑副本 - 但你也可以做更高级的东西:

clipp | sed 's/^/    /' | cclip
Run Code Online (Sandbox Code Playgroud)

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

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

printf "\nalias clipp=\'xclip -selection c -o\'\n" >> ~/.bashrc
printf "\nalias cclip=\'xclip -selection c -i\'\n" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)


win*_*rrr 12

Linux、macOS、Windows (WSL/CYGWIN)

这些系统中的每一个都使用自己的工具将剪贴板功能合并到命令行界面(CLI) 中。这意味着,例如在 Windows Subsystem for Linux (WSL) 上使用 Ubuntu CLI 时,通常的xclip解决方案将不起作用。macOS 也是如此。

下表概述了不同系统上所需的复制/粘贴工具:

操作系统 复制 粘贴
WSL clip.exe powershell.exe Get-Clipboard
长城 > /dev/clipboard cat /dev/clipboard
苹果系统 pbcopy pbpaste
Linux xclip -sel clip xclip -sel clip -o

统一.bashrc解决方案

只需将以下代码放入您的系统中~/.bashrc即可启用copypaste在所有系统上使用。该解决方案适用于“普通”Linux 系统(即 Ubuntu、Debian)以及 WSL 和 macOS:

if grep -q -i microsoft /proc/version; then
  # on WSL: version contains the string "microsoft"
  alias copy="clip.exe"
  alias paste="powershell.exe Get-Clipboard"
elif grep -q -i cygwin $(uname -a); then
  # on CYGWIN: uname contains the string "cygwin"
  alias copy="/dev/clipboard"
  alias paste="cat /dev/clipboard"
elif [[ ! -r /proc/version ]]; then
  # on MAC: version is not readable at all
  alias copy="pbcopy"
  alias paste="pbpaste"
else
  # on "normal" linux
  alias copy="xclip -sel clip"
  alias paste="xclip -sel clip -o"
fi
Run Code Online (Sandbox Code Playgroud)

在所有系统上使用

复印:

echo "hello world" | copy
# or for direct file input
copy < file
Run Code Online (Sandbox Code Playgroud)

粘贴:

paste > file
Run Code Online (Sandbox Code Playgroud)

  • 这应该是一个 ZSH 插件! (3认同)

mcv*_*vkr 11

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

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

$ pwd | pbcopy
Run Code Online (Sandbox Code Playgroud)

使用剪贴板中的内容作为

$ cd $(pbpaste)
Run Code Online (Sandbox Code Playgroud)


dgo*_*gor 11

苹果系统:

your_command_which_gives_output | pbcopy
Run Code Online (Sandbox Code Playgroud)

WSL / GNU/Linux(需要 xclip 包)

your_command_which_gives_output | xclip -sel clip
Run Code Online (Sandbox Code Playgroud)

Windows 上的 Git Bash:

your_command_which_gives_output | clip
Run Code Online (Sandbox Code Playgroud)


d.r*_*aev 7

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

从Windows 7+命令提示符:

ssh user@server cat /etc/passwd | clip
Run Code Online (Sandbox Code Playgroud)

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

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


Mic*_*icz 7

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

$ git log -1 --pretty=%B | xsel -i -b
Run Code Online (Sandbox Code Playgroud)


Yam*_*raf 7

当我必须复制我的时,我通常会运行这个命令ssh-key

cat ~/.ssh/id_rsa.pub | pbcopy
Run Code Online (Sandbox Code Playgroud)

cmd+vctrl+v其他任何地方。


Jen*_*man 6

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

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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


小智 5

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

Error: Can't open display: (null)
Run Code Online (Sandbox Code Playgroud)

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

echo hello | clip.exe
Run Code Online (Sandbox Code Playgroud)

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