“xclip”与“xsel”

Byt*_*der 73 software-recommendation xclip xsel

有两个命令行工具(在两个不同的包中)可以访问 X 剪贴板:

  • xclip
  • xsel

我很想知道这两者之间的区别,并听取建议在哪些情况下使用哪个。

Ser*_*nyy 40

二者xclipxsel可以存储文本到3点不同的选择(默认为初级选择)。根据经验,我知道主要选择基本上是您通过单击鼠标中键突出显示并释放的内容(这对应于同时按下笔记本电脑上的左右触摸板键)。剪贴板是传统的CtrlV.

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)
Run Code Online (Sandbox Code Playgroud)

当然你可以使用 shell 重定向xsel来解决这个问题

xieerqi:
$ xsel --clipboard < testfile.txt                                              

xieerqi:
$ HELLOWORLD
mksh: HELLOWORLD: not found
Run Code Online (Sandbox Code Playgroud)

xclip还因为您可以将剪贴板的内容输出到文件(当您想重定向 PRIMARY selection ,即高亮显示时这可能很有用)。 xsel只提供输出到标准输出

  • 那么除了`xsel` 只能通过STDIN/STDOUT 操作,而`xclip` 也可以在那里使用真实文件之外,没有什么区别?好无聊!好吧,我不久前与 `xsel` 交了朋友,并且可以使用 shell 重定向到文件,所以我会继续使用它。 (3认同)
  • 除非我遗漏了手册页中的某些内容或者有一些隐藏的功能,这就是这两个程序的全部内容:) 两者都做得足够好,所以我想这更像是一种偏好而不是任何东西 (2认同)
  • 请注意,[另一个答案](https://askubuntu.com/a/898094/146273)解释了“xclip”未关闭 STDOUT 的问题。如果您在挂起的脚本或函数中使用 xclip,则这可能是原因。 (2认同)

Pla*_*ong 29

除了@Serg 的回答之外Arch Wiki中的Tmux 页面还有一条信息在某些特定情况下很有用:

与 xsel 不同,[xclip] 在打印不适合当前语言环境的原始比特流时效果更好。然而,使用 xsel 更简洁,因为 xclipSTDOUT在从 tmux 缓冲区读取后不会关闭。因此,tmux 不知道复制任务已完成,并继续等待 xclip 终止,从而导致 tmux 无响应。解决方法是重定向STDOUT/dev/null

  • 如果您遇到`xclip`,这个**不关闭STDOUT** 问题是一个主要问题。我浪费了 2 个小时调试它。我最终切换到了 `xsel -bi` 和 `xsel -bo`。 (2认同)

小智 21

要记住的其他事情,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
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑大多数安装已经有了 libxmu6,许多包,如 xterm、x11-apps 和 x11-utils 都依赖于它。 (2认同)

ana*_*nik 10

使用xclip,因为xsel不能从剪贴板中提取二进制数据,例如屏幕截图。例如,将屏幕截图保存到剪贴板:

$ maim -s | xclip -selection clipboard -t image/png
Run Code Online (Sandbox Code Playgroud)

然后保存到文件并比较输出:

$ 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
Run Code Online (Sandbox Code Playgroud)

  • 我根本没有从`gnome-screenshot` 得到输出,但这是另一个问题 - https://gitlab.gnome.org/GNOME/gnome-screenshot/issues/14 (2认同)