像OSX的Linux pbcopy一样


141

在OSX的终端中,我可以将输出管道传输到pbcopy,然后进入Web浏览器并将其粘贴。我在Linux中使用xcopy进行了尝试,但是当我切换到浏览器时,它只会使用上一次使用浏览器时的内容覆盖剪贴板。在Linux中,什么像pbcopy一样起作用?


2
......以及那些不知道pbcopy是什么,这里的手册页developer.apple.com/library/mac/#documentation/Darwin/Reference/...
罗伯·考威尔

ClipIt(和类似的剪贴板管理器)是对此有帮助的工具。它不仅可以在终端中很好地播放,还可以保留剪贴板的历史记录。非常有用。
brandizzi

Answers:


162

如果您安装了X,则可以按以下方式尝试xsel:

alias pbcopy='xsel --clipboard --input'
alias pbpaste='xsel --clipboard --output'

或使用xclip:

alias pbcopy='xclip -selection clipboard'
alias pbpaste='xclip -selection clipboard -o'

现在您可以使用它们:

echo 'go to my clipboard' | pbcopy

当我没有XI时,使用GNU Screen功能在使用键盘的会话中打开的外壳之间进行复制

复制 : Ctrl-a -> Esc -> go to wanted position * -> Space (to begin selecting) -> press k to go forward mark text -> Enter

粘贴 : Ctrl-a + ]

*移动是通过vim来完成的,例如键绑定(j,k,l和m)。


1
谢谢,这正是我想要的信息。现在,我不知道是否可以通过Screen使我使用Emacs命令选择要复制的区域...
Noah Sussman

8
xsel:无法打开显示:(空):设备的不适当的ioctl
itsazzad

我通过安装Xming并设置DISPLAY =:0 解决了Windows上的“无法打开显示”问题
scottgwald

1
对于TMUX用户来说,它更像是Ctrl-b, [ -> go to position -> Space -> select texts -> Enter粘贴由Ctrl-b, ]
埃尔阙m'est

只要有可能(当然,这是您想要的永久性的东西),而不是使用别名在配置文件中使名称空间复杂化,最好在中为此创建一个基本脚本/bin/特别是如果您在macOS和linux计算机之间共享您的配置文件。
本杰明·R

9

在您的bin文件夹中放入一个名为pbcopy的脚本:

#!/bin/bash
xclip -i -sel c -f |xclip -i -sel p

这会将STDIN放入选择缓冲区和剪贴板:

echo Hello world |pbcopy

为什么会cat需要?在这种情况下,它不会只是将stdin重定向到stdout,从而导致无用的虐待猫还是我错过了什么?
Hultner

2
没错,这看起来确实是对猫的无用虐待:-)
Erik

2
如果您(像我一样)想知道神秘的“无用猫”在哪里,则已将其删除。NTS:如果评论混乱,请查看历史记录^^'
yaitloutou

使用此后如何粘贴内容?只是使用xclip -o?或者,还有更好的方法?
n1k31t4

@ n1k31t4我所做的是在上使用等效脚本xclip -sel c -o编写脚本/bin/pbpaste
本杰明·R

5

扩展@Erik和@xpixelz的解决方案;这两个脚本应在两个平台上都可以工作:

pbcopy:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  cat | /usr/bin/pbcopy
else
  # copy to selection buffer AND clipboard
  cat | xclip -i -sel c -f | xclip -i -sel p
fi

pbpaste:

#!/bin/bash
__IS_MAC=${__IS_MAC:-$(test $(uname -s) == "Darwin" && echo 'true')}
if [ -n "${__IS_MAC}" ]; then
  /usr/bin/pbpaste
else
  xclip -selection clipboard -o
fi

但是,为什么还要在本机用户区中的OS X上使用此脚本呢?
Hultner

*作为类似功能的参考,*跨平台点文件:github.com/westurner/dotfiles/blob/develop/scripts/pbcopy
Wes Turner

仍然是虐待猫,为什么不检查xclip是否存在并分配别名(如果存在)?或检查pbpaste二进制文件是否存在也是一个选择。检查uname似乎是解决该问题的一种奇怪方法。
Hultner

2
@Hultner“检查uname似乎是解决问题的一种奇怪方法”,您还可以优先检查二进制文件,以便按顺序检查a ${a:-${b:-${c:+${d}}}}和一些 type -P/ has变量分配以及/ bin / test执行程序。
Wes Turner

2

此答案是指Windows的Linux子系统。

简短答案:clip.exe好像是pbcopy为了将某些东西放在Windows剪贴板上一样。这是魔法。echo "Hello Windows" | clip.exe在您的bash或Ubuntu bash终端中使用示例,然后在Windows程序中使用“ ctrl-v”。

更多内容:

上面的评论中,我提到,当在Windows上使用Xming启用此功能时,必须export DISPLAY=:0xselxclip解决方案起作用之前设置DISPLAY变量(在许多情况下为)。令人愤怒的是,此解决方案以一种不可靠,随机的方式工作-从Linux粘贴到Windows时,按ctrl-v1到10次会导致粘贴剪贴板(一次)(这在我的Windows 10 Surface Book 2上)。不要浪费时间,请使用clip.exe

注意:不要忘记.exe。否则,Ubuntu bash会建议您安装Linux软件包geomview,这不是您想要的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.