How can I copy the output of a command directly into my clipboard?
如何在使用终端时将命令的输出传输到剪贴板并将其粘贴回来? 例如:
1 | cat file | clipboard |
我一直想做到这一点,并找到了一个简单易行的方法。我写下了完整的程序,以防万一其他人需要它。
首先安装名为
1 | sudo apt-get install xclip |
然后,您可以将输出通过管道传输到
1 | cat file | xclip |
要粘贴刚复制的文本,您应使用:
1 | xclip -o |
为简化生活,您可以像我一样在.bashrc文件中设置别名:
1 2 | alias"c=xclip" alias"v=xclip -o" |
为了看看它有多有用,想象一下我想在一个新的终端窗口中打开我当前的路径(在某些系统上可能还有其他方法可以像Ctrl + T那样做,但这只是为了说明目的):
1 2 3 4 5 | Terminal 1: pwd | c Terminal 2: cd `v` |
注意
仅将内容复制到
1 | cat file | xclip |
如果要粘贴除
1 | cat file | xclip -selection clipboard |
在OS X上,使用
我已经为Linux / OSX / Cygwin创建了一个类似于其他一些工具但略微独特的工具。我称之为
在那个要点中,我演示了如何使用Linux,macOS和Cygwin通过命令行进行复制和粘贴。
Linux的
1 2 3 4 5 6 7 | _copy(){ cat | xclip -selection clipboard } _paste(){ xclip -selection clipboard -o } |
苹果系统
1 2 3 4 5 6 7 | _copy(){ cat | pbcopy } _paste(){ pbpaste } |
Cygwin的
1 2 3 4 5 6 7 | _copy(){ cat > /dev/clipboard } _paste(){ cat /dev/clipboard } |
注意:我原本打算在我对Bob Enohp的回答的评论中提到这一点。但后来我意识到我应该向我的要点添加一个自述文件。由于gist编辑器没有提供Markdown预览,所以我在这里使用了答案框,在复制/粘贴之后我想到了"我不妨提交答案"。
CB
防漏T恤到剪贴板
此脚本以
它就像您的普通复制和粘贴命令,但统一并能够感知您何时希望它可链接
例子
复制
1 2 | $ date | cb # clipboard contains: Tue Jan 24 23:00:00 EST 2017 |
糊
1 2 3 4 5 6 7 8 | # 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 |
链接
1 2 3 4 5 | $ 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 |
通过文件重定向复制
(按时间顺序,最后演示这个是有意义的)
1 2 3 4 5 | # 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 |
我写了这个小脚本,从复制/粘贴命令中获取猜测。
Linux版本的脚本依赖于已在系统中安装的xclip。该脚本称为剪贴板。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/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。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/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 |
使用脚本非常简单,因为您只需管道输入或输出
1 2 3 | $ cat file | clipboard $ clipboard | less |
将其添加到
1 2 3 | # Now `cclip' copies and `clipp' pastes' alias cclip='xclip -selection clipboard' alias clipp='xclip -selection clipboard -o' |
Now clipp pastes and cclip copies — but you can also do fancier stuff:
1 clipp | sed 's/^/ /' | cclip↑ indents your clipboard; good for sites without stack overflow's { } button
您可以通过运行以下命令添加它:
1 2 3 4 5 6 | printf" alias clipp=\'xclip -selection c -o\' ">> ~/.bashrc printf" alias cclip=\'xclip -selection c -i\' ">> ~/.bashrc |
我正在使用Parcellite和
1 | $ git log -1 --pretty=%B | xsel -i -b |
如果不使用外部工具,如果要连接到服务器视图SSH,这是一个相对简单的命令:
从Windows 7+命令提示符:
1 | ssh user@server cat /etc/passwd | clip |
这会将远程文件的内容放入本地剪贴板。
(该命令需要为密钥运行Pageant,否则它将要求您输入密码。)
在安装了xclip的Linux中:
xclip -selection clipboard < file
我制作了一个提供类似功能的小工具,不使用xclip或xsel。
https://sourceforge.net/projects/commandlinecopypaste/
请注意,此工具不需要X会话。剪贴板只能在终端中使用,不能通过Ctrl + V或鼠标中键点击粘贴到其他X-windows中。
基于之前的帖子,我最终得到了以下轻量级别名解决方案,可以添加到
1 2 3 4 5 | if [ -n"$(type -P xclip)" ] then alias xclip='xclip -selection clipboard' alias clipboard='if [ -p /dev/stdin ]; then xclip -in; fi; xclip -out' fi |
例子:
1 2 3 4 5 6 7 8 9 10 11 | # 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 |
只是为了覆盖边缘情况:)并且因为问题标题要求(至少现在)如何将命令的输出直接复制到剪贴板。
通常我发现在命令输出已经执行之后复制命令的输出并且我不希望或不能再次执行命令是有用的。
对于这种情况,我们可以使用gdm或类似的鼠标实用程序,并使用鼠标选择。
或者,这是我的首选方法(因为当你有多个窗格并且你需要选择多行时,鼠标无法在一个窗格内正确选择),使用tmux我们可以使用标准复制到tmux缓冲区[,空格,移动选择,输入或您可以选择一个代码块。当你在像tmux这样的cli多路复用器的一个通道内时,这个特别有用,你需要选择一堆文本,而不是行号(我的vim设置呈现行号)
在此之后,您可以使用以下命令:
tmux save-buffer - | xclip -i
您当然可以将其别名为您喜欢的内容或直接在tmux配置文件中绑定
这只是为了给你一个概念性的答案,以便在无法再次执行命令时覆盖这种边缘情况。如果您需要更具体的代码示例,请告诉我们
干杯
我来自一个精简的KDE背景,无法访问
必需条件:
创建一个bash可执行文件
1 2 | #!/bin/bash qdbus org.kde.klipper /klipper setClipboardContents"$1"> /dev/null |
注意:这需要是bash,因为TCSH不支持多行参数。
其次是
1 | alias clipboard xargs -0 /path/to/foo |
说明:
用法示例:
1 | ls | clipboard |
这会将当前文件夹的内容复制到剪贴板中。
注意:仅适用于管道。如果需要复制参数,请直接使用bash可执行文件。
对于那些在Windows系统上安装bash的用户(称为Windows子系统Linux(WSL)),尝试使用xclip会出错:
1 | Error: Can't open display: (null) |
相反,回想一下linux子系统可以访问Windows可执行文件。可以像使用clip.exe一样
1 | echo hello | clip.exe |
允许您使用粘贴命令(ctrl-v)。