如何在使用终端时将命令输出传输到剪贴板并将其粘贴回来?例如:
cat file | clipboard
答案 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创建了一个类似于其他一些工具的工具,但有些独特。我称之为cb
和it can be found in this github gist。
在那个要点中,我演示了如何使用Linux,macOS和Cygwin通过命令行进行复制和粘贴。
_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's answer的评论中提到这一点。但后来我意识到我应该向我的要点添加一个自述文件。由于gist编辑器没有提供Markdown预览,所以我在这里使用了答案框,在复制/粘贴到我的想法后,#34;我不妨提交答案。"
此脚本以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上的Ubuntu / Debian)时,xclip
解决方案将无法使用。相反,您需要使用clip.exe
和powershell.exe
复制并粘贴到Windows剪贴板中。
此解决方案可在基于“真实” 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)
如果您正在寻找问题的答案,“如何将一个命令的输出复制到剪贴板以用于下一个命令?”像我一样,那么这个解决方案对于 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)
macOS:
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 编辑器。
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
的行之前不会损坏任何文件。#
然后将日期复制到编辑器内的剪贴板并将其粘贴到任何地方。sudo gedit /path/intended_file
文件的内容写入 uniqueFile
文件:delete.txt
sudo find / -iname 'uniqueFile' >> delete.txt
并将(Ctrl-C)突出显示的所需长长路径从编辑器复制到剪贴板。或者您也可以使用终端 nano 编辑器(虽然不支持“标准”Ctrl-C)。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精简的背景,无法访问xclip
,xsel
或其他奇特的东西。我有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可执行文件,该可执行文件使用klipper
向qdbus
发送“复制到剪贴板”请求。 /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)。