使用终端时,如何将命令的输出传递到剪贴板中并粘贴回去?例如:
cat file | clipboard
apt install xclip
和cat file | xclip -sel clip
使用终端时,如何将命令的输出传递到剪贴板中并粘贴回去?例如:
cat file | clipboard
apt install xclip
和cat file | xclip -sel clip
Answers:
我一直想做到这一点,并找到了一种不错的简便方法。我写下了完整的程序,以防万一其他人需要它。
首先安装一个名为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
alias "cs=xclip -selection clipboard"
并alias "vs=xclip -o -selection clipboard"
简化从系统剪贴板的复制/粘贴操作
在OS X上,使用pbcopy
; pbpaste
朝相反的方向前进。
pbcopy < .ssh/id_rsa.pub
pbcopy < git merge-base master some-branch
git merge-base master some-branch | pbcopy
我为Linux / OSX / Cygwin创建了一个工具,该工具与其他工具类似,但略有不同。我称之为它cb
,可以在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的回答的评论中提及这一点。但是后来我意识到我应该在自己的要旨中添加自述文件。由于要点编辑器不提供Markdown预览,因此我在此处使用了答案框,将其复制/粘贴到我的要点思想后,“我也可以提交答案。”
该脚本的建模依据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
我写了这个小脚本,将猜测工作排除在复制/粘贴命令之外。
脚本的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
pbcopy
,并pbpaste
在Linux上,因此适用于Linux和OS X.
~/.scripts/clipboard
请执行chmod +x ~/.scripts/clipboard
以下操作:*将其保存在*使其对bash 可执行:*添加export PATH=$PATH:~/.scripts
到~/.bashrc
fish 的末尾:*添加set PATH ~/.scripts $PATH
到~/.config/fish/fish.config
如果尚不存在任何文件或文件夹,则只需创建它们即可。
clipboard(){ ... }
,并将其粘贴到.bashrc
date | cb | tee -a updates.log
。这会将date
命令输出发送到剪贴板,并将其传递到tee -a
命令,命令将命令输出附加到文件,然后传递给stdout
。但这就像“ 剪贴板的防漏三通”,因为如果您这样做,date | cb
您将不会获得任何输出。最后确实也cb > file.txt
gist.github.com/RichardBronosky/...
xclip -i -selection clipboard
为xargs echo -n | xclip -i -selection clipboard
将此添加到您的~/.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
我正在使用Parcellite xsel
并将上次提交消息从中复制git
到剪贴板管理器中(由于某些原因xclip
不起作用):
$ git log -1 --pretty=%B | xsel -i -b
在不使用外部工具的情况下,如果要连接到服务器视图SSH,这是一个相对简单的命令:
在Windows 7+命令提示符下:
ssh user@server cat /etc/passwd | clip
这会将远程文件的内容放入本地剪贴板。
(此命令要求运行Pageant作为密钥,否则它将要求您输入密码。)
我做了一个小的工具,提供了类似的功能,而没有使用xclip或xsel。stdout
被复制到剪贴板,并可以再次粘贴到终端中。看到:
https://sourceforge.net/projects/commandlinecopypaste/
请注意,此工具不需要X会话。剪贴板只能在终端中使用,而不必通过Ctrl+V鼠标中键单击或粘贴到其他X窗口中。
根据以前的帖子,我最终获得了以下可以添加到的轻量别名解决方案.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
我来自一个剥离下来KDE背景,没有访问xclip
,xsel
或其他花哨的东西。我有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可执行文件。
在Wayland xcopy上似乎不起作用,请改用wl-clipboard。例如在软呢帽上
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
只是为了介绍一个极端情况:),并且因为问题标题询问(至少现在是这样),所以如何将命令的输出直接复制到剪贴板。
通常,我发现在执行完命令后复制命令的输出很有用,而我不想或无法再次执行命令。
对于这种情况,我们可以使用gdm或类似的鼠标实用程序,然后使用鼠标进行选择。apt-get install gdm
然后右键单击或在终端中复制和粘贴的Cntrl + Shift + c和Cntrl + Shift + v组合
或者,这是我的首选方法(因为当您并排放置多个窗格并且需要选择多个行时,鼠标无法在一个窗格内正确选择),使用tmux,我们可以使用标准复制到tmux缓冲区中[,空格,移动选择,输入,或者您可以选择一个代码块。当您在诸如tmux之类的cli复用器的一个通道内并且需要选择一堆文本而不是行号时,这特别有用(我的vim设置会渲染行号)
之后,您可以使用以下命令:
tmux保存缓冲区-| xclip -i
当然,您可以将其别名为您喜欢的名称,也可以直接将其绑定到tmux配置文件中
这只是为了给您一个概念性的答案,以解决无法再次执行命令的情况。如果您需要更具体的代码示例,请告诉我
干杯