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/clipboardclip更新版本的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-getpacman ,也无法使用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,以便应用更改。

用法

你现在可以使用setclipgetclip ,例如:

 $ 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/clipboardecho "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-[ (默认情况下, prefixCtrl + B )。 这个模式所使用的缓冲区是独立于tmux的,它开辟了相当多的可能性,使得它在正确的情况下比Xselect更多样化。

要退出此模式,请按q ; 导航,使用vimemacs绑定(default = vim),所以hjkl用于移动, v/V/Cv用于字符/行/块select等等。当你有select时, 按Enter键来复制并退出模式。

要从此缓冲区中粘贴,请使用prefix-]

贝壳

X11任何安装似乎都默认有两个程序: xclipxsel (有点像startxxinit )。 其他大多数答案都提到了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 (或者什么都不是) PRIMARYsSECONDARYbCLIPBOARDo是输出。

例如:假设我想从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 PRIMARYCLIPBOARD选项。 这两个选项可以分别从*+寄存器访问,并且可以像任何其他寄存器一样在您闲暇的时候写入和读取。 例如:

 :%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

请享用。