问题描述
有两个命令行工具(位于两个不同的包中)用于访问X剪贴板:
-
xclip
-
xsel
我很想知道两者之间的区别,并听听在哪种情况下使用哪个推荐。
最佳回答
xclip
和xsel
都可以将文本存储到3 different selections(默认情况下是主要选择)。从经验中我知道,主要选择基本上就是您的high-light,并通过鼠标中键单击释放(对应于在笔记本电脑上同时按下左右触摸板键)。剪贴板是传统的Ctrl
V
。
但是,通过检查两个页面的man
页面,我发现xclip
在一个方面胜出-从输入文件中读取:
xieerqi:
$ cat testfile.txt
HELLOWORLD
xieerqi:
$ xclip -selection clipboard testfile.txt
xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found
xieerqi:
$ xsel testfile.txt
Usage: xsel [options]
Manipulate the X sele . . . (usage page goes on)
当然,您可以对xsel
使用shell重定向来解决该问题
xieerqi:
$ xsel --clipboard < testfile.txt
xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found
xclip
还可以将剪贴板的内容输出到文件中(这在您要重定向PRIMARY选择(即突出显示)时可能很有用)也很成功。 xsel
仅向stdout提供输出
次佳回答
除了@Serg answer之外,还有来自Tmux page in the Arch Wiki的一些信息在某些特定情况下很有用:
unlike xsel it [xclip] works better on printing raw bitstream that doesn’t fit the current locale. Nevertheless, it is neater to use xsel instead of xclip, because xclip does not close STDOUT after it has read from tmux’s buffer. As such, tmux doesn’t know that the copy task has completed, and continues to wait for xclip’s termination, thereby rendering tmux unresponsive. A workaround is to redirect STDOUT of xclip to /dev/null
第三种回答
还有一点要记住,xsel
的依赖关系比xclip
的依赖关系少:
# apt-cache depends xsel
xsel
Depends: libc6
Depends: libx11-6
Conflicts: xsel:i386
# apt-cache depends xclip
xclip
Depends: libc6
Depends: libx11-6
Depends: libxmu6
Conflicts: xclip:i386
第四种回答
使用xclip
,因为xsel
无法从剪贴板提取二进制数据,例如屏幕截图。例如,将屏幕截图保存到剪贴板:
$ maim -s | xclip -selection clipboard -t image/png
然后保存到文件并比较输出:
$ xclip -o -selection clipboard > 1xclip
$ xsel -o --clipboard > 1xsel
$ ls -go 1*
-rw-rw-r-- 1 11948 Sep 26 20:13 1xclip
-rw-rw-r-- 1 0 Sep 26 20:13 1xsel