pipe道到/从剪贴板
是否有可能pipe/从Bash剪贴板?
无论是从设备手柄进行pipe道连接还是使用辅助应用程序,我都找不到任何东西。
例如,如果/dev/clip
是一个链接到剪贴板的设备,我们可以这样做:
cat /dev/clip # Dump the contents of the clipboard cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
你有点模棱两可 我希望你可能是X内部的一个Linux用户,他们想把东西放在X PRIMARY
剪贴板中。
了解bash
没有剪贴板很重要。 没有“剪贴板”这样的东西,因为bash
可以在Windows,Mac OS X,很多其他操作系统,X内部,X外部运行……更不用说X本身有三个不同的剪贴板。 有很多你可以处理的剪贴板。 通常,您要与之交谈的剪贴板上有一个实用程序,可以让您与之交谈。
在X的情况下,是的,有xclip
(和其他)。 xclip -selection c
将数据发送到在大多数应用程序中使用Ctrl-C,Ctrl-V的剪贴板。
如果您正在尝试与Mac OS X剪贴板进行交谈,那么还有pbcopy
。
如果你在Linuxterminal模式(不是X),那么也许你需要看看gpm
。
还有GNU screen
有一个剪贴板。 把东西放在那里,看screen
命令“ readreg
”。
在Windows / cygwin下,使用/dev/clipboard
或clip
更新版本的Windows(至lessWindows 10)。
确保你正在使用别名xclip="xclip -selection c"
否则你不能只用Ctrl + v粘贴到不同的地方。
echo test | xclip
Ctrl + v === test
安装
# You can install xclip using `apt-get` apt-get install xclip # or `pacman` pacman -S xclip # or `dnf` dnf install xclip
如果您无法访问apt-get
或pacman
,也无法使用dnf
,则可以在sourceforge上find源代码。
build立
巴什
在~/.bash_aliases
,添加:
alias setclip="xclip -selection c" alias getclip="xclip -selection c -o"
不要忘记使用加载新的configuration. ~/.bash_aliases
. ~/.bash_aliases
或通过重新启动您的configuration文件。
鱼
在~/.config/fish/config.fish
中添加:
abbr setclip "xclip -selection c" abbr getclip "xclip -selection c -o"
不要忘记重新启动你的terminal来重新启动你的terminal,以便应用更改。
用法
你现在可以使用setclip
和getclip
,例如:
$ echo foo | setclip $ getclip foo
在Mac OS X上,您可能会方便地使用这些命令行工具:
-
pbcopy
-
pbpaste
例:
cat ~/.bashrc | pbcopy
之后, ~/.bashrc
文件的命令内容将可用于粘贴cmd
+ v
快捷方式。
尝试
xclip
xclip - command line interface to X selections (clipboard)
人
xsel在Debian / Ubuntu / Mint上
# append to clipboard: cat 'the file with content' | xsel -ib # or type in the happy face :) and ... echo 'the happy face :) and content' | xsel -ib # show clipboard xsel -b # Get more info: man xsel
安装
sudo apt-get install xsel
在Windows上(使用Cygwin)尝试cat /dev/clipboard
或echo "foo" > /dev/clipboard
本文中提到的echo "foo" > /dev/clipboard
。
这是一个准备使用bash脚本阅读在多个平台上工作的剪贴板。 请在这里编辑脚本,如果你添加function(例如更多的平台)。
#!/bin/bash # WF 2013-10-04 # multi platform clipboard read access # supports # Mac OS X # git shell / Cygwin (Windows) # Linux (eg Ubuntu) # # display an error # error() { echo "error: $1" 1>&2 exit 1 } # # getClipboard # function getClipboard() { os=`uname` case $os in # git bash (Windows) MINGW32_NT-6.1) cat /dev/clipboard;; # Mac OS X Darwin*) pbpaste;; # Linux Linux*) # works only for X clipboard - a check that X is running might be due xclip -o;; *) error "unsupported os $os";; esac } tmp=/tmp/clipboard$$ getClipboard >$tmp cat $tmp # comment out for debugging rm $tmp
仅适用于Mac:
echo "Hello World" | pbcopy pbpaste
这些位于/usr/bin/pbcopy
和/usr/bin/pbpaste
。
Linux中有不同的剪贴板; X服务器有一个,窗口pipe理器可能有另一个,等等。没有标准的设备。
哦,是的,在CLI中,屏幕程序也有自己的剪贴板,就像Emacs和vi等其他应用程序一样。
在X中,你可以使用xclip 。
你可以检查这个线程的其他可能的答案: http : //unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
在Windows(Cygwin)中复制并粘贴到剪贴板:
看到:
$ clip.exe – ?
CLIP说明:将命令行工具的输出redirect到Windows剪贴板。 这个文本输出可以被粘贴到其他程序中。 参数列表:/? 显示此帮助消息。 例子:DIR | CLIP将当前目录列表的副本放入Windows剪贴板。 CLIP <README.TXT将readme.txt中的文本副本放在Windows剪贴板上。
还有getclip(可以用来代替shift + ins!),putclip(echo oauoa | putclip.exe把它放到剪辑里)
这是一个简单的Python脚本,可以完成您所需要的function:
#!/usr/bin/python import sys # Clipboard storage clipboard_file = '/tmp/clipboard.tmp' if(sys.stdin.isatty()): # Should write clipboard contents out to stdout with open(clipboard_file, 'r') as c: sys.stdout.write(c.read()) elif(sys.stdout.isatty()): # Should save stdin to clipboard with open(clipboard_file, 'w') as c: c.write(sys.stdin.read())
将其保存为path中的某个可执行文件(我将其保存到/usr/local/bin/clip
中,可以将内容保存到剪贴板中。
echo "Hello World" | clip
你可以将你的剪贴板中的内容传送给其他程序
clip | cowsay _____________ < Hello World > ------------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||
自行运行只会输出剪贴板中的内容。
xsel -b
x11的工作,它大部分已经安装。 在xsel的手册页看看是值得的。
如果你像我一样,在没有root权限的linux服务器上运行,并且没有xclip或者gpm,你可以通过使用一个临时文件来解决这个问题。 例如:
$ echo "hello world" > ~/clip $ echo `cat ~/clip` hello world
几年前我写的一些Windows程序。 它们允许您转储,推送,追加和打印剪贴板。 它是这样工作的:
dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip
它包含源代码: cmd_clip.zip
有几个方法。 一些已经提到的方式包括(我认为)tmux,screen,vim,emacs和shell。 我不知道emacs或屏幕,所以我会去其他三个。
TMUX
虽然不是X选项,但是tmux具有可通过prefix
访问的复制模式 – prefix-[
(默认情况下, prefix
为Ctrl + B )。 这个模式所使用的缓冲区是独立于tmux的,它开辟了相当多的可能性,使得它在正确的情况下比Xselect更多样化。
要退出此模式,请按q ; 导航,使用vim
或emacs
绑定(default = vim),所以hjkl
用于移动, v/V/Cv
用于字符/行/块select等等。当你有select时, 按Enter键来复制并退出模式。
要从此缓冲区中粘贴,请使用prefix-]
。
贝壳
X11
任何安装似乎都默认有两个程序: xclip
和xsel
(有点像startx
和xinit
)。 其他大多数答案都提到了xclip
,我真的很喜欢xsel
,所以我将介绍xsel
。
从xsel(1x) :
input选项
-a,–append
将标准input附加到select。 意味着-i 。
-f, – 关注
当标准input增长时附加到select。 意味着-i 。
-i, – input
将标准input读入select。
输出选项
-o, – 输出
将select写入标准输出。
操作选项
-c, – 清楚
清除select。 覆盖所有input选项。
-d, – 删除
要求删除当前的select。 这不仅清除了select,而且还要求select所在的节目删除所select的内容。 覆盖所有input选项。
select选项
-p,–primary
在PRIMARY选项上操作(默认)。
-s, – secondcond
在SECONDARY选项上操作。
-b,–clipboard
在CLIPBOARDselect上操作。
这就是你需要知道的一切。 p
(或者什么都不是) PRIMARY
, s
是SECONDARY
, b
是CLIPBOARD
, o
是输出。
例如:假设我想从TTY复制foo
的输出,并将其粘贴到一个网页上以查看错误报告。 要做到这一点,这是理想的复制到/从TTY / X会话。 所以问题变成如何从TTY访问剪贴板?
对于这个例子,我们假定X会话正在显示:1
。
$ foo -v Error: not a real TTY details: blah blah @ 0x0000000040abeaf4 blah blah @ 0x0000000040abeaf8 blah blah @ 0x0000000040abeafc blah blah @ 0x0000000040abeb00 ... $ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1
然后,我可以按照常规Ctrl-V
的forms。
现在说支持网站上的某个人给了我一个运行来解决问题的命令。 这是复杂和漫长的。
$ DISPLAY=:1 xsel -bo sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt" $ $(DISPLAY=:1 xsel -bo) Password for braden: UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00% Clearing cache... Fetching sources... Reticulating splines... Watering trees... Climbing mountains... Looking advanced... Done. $ foo Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99
比萨订购似乎是一个生产力的使用命令行。
…继续。
VIM
如果用+clipboard
编译(这很重要!检查你的vim --version
),Vim应该可以访问X PRIMARY
和CLIPBOARD
选项。 这两个选项可以分别从*
和+
寄存器访问,并且可以像任何其他寄存器一样在您闲暇的时候写入和读取。 例如:
:%y+ ; copy/yank (y) everything (%) into the CLIPBOARD selection (+) "+p ; select (") the CLIPBOARD selection (+) and paste/put it ggVG"+y ; Alternative version of the first example
如果您的vim副本不直接支持访问X选项,那么这不是世界末日。 您可以按照上一节所述使用xsel
技术。
:r ! xsel -bo ; read (r) from the stdout of (!) `xsel -bo` :w ! xsel -b ; write (w) to the stdin of (!) `xsel -b`
绑定几个关键组合,你应该是好的。
还有xclip-copyfile 。
虽然> 1年后,我分享一个稍微不同的解决scheme。 希望这对某个人有用。
昨天我发现自己的问题是: “如何在不同的用户会话之间共享剪贴板? 。 当用Ctrl + Alt + F7切换会话时,实际上你不能粘贴你所复制的内容。
我想出了以下快速和肮脏的解决scheme,基于命名pipe道。 它肯定是相当裸露和生,但我发现它的function:
user1@host:~$ mkfifo /tmp/sharedClip
然后在发送terminal
user1@host:~$ cat > /tmp/sharedClip
最后,在接收端:
user2@host:~$ cat /tmp/sharedClip
现在,您在第一个terminal中键入或粘贴任何内容,并且(在返回后 ),它将立即显示在接收terminal中,您可以在其中随意复制/粘贴。
当然,这不仅仅是严格地将user1的剪贴板中的内容放在user2的剪贴板中,而是需要额外的一对Paste&Copy点击。
从这个线程,有一个选项,不需要安装任何xclip
/ xsel
/ xsel
第三方软件。
perl脚本(因为perl通常总是安装的)
use Win32::Clipboard; print Win32::Clipboard::GetText();
在macOS中使用pbpaste
例如:
更新剪贴板
pbpaste | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy
请享用。