使用终端命令行控制剪贴板

复制和粘贴的功能可能是我们平时使用电脑时用到最多的功能,操作系统为了实现复制粘贴功能实际上在后台提供了一个剪贴板的功能,剪贴板是一个中转,方便我们在不同的软件程序之间拷贝字符。除了常用的ctrl-c和ctrl-v大法(大笑),你还知道其他的使用方式吗?

比如在工作中,有一个程序出现了某些错误输出,我们需要把这些东西拷贝到QQ等通选软件上以便和其他人沟通,需要经过以下几个步骤:

  1. 把结果输出到一个文件
  2. 用编辑器打开这个文件
  3. 鼠标选中要复制的内容
  4. ctrl-c复制
  5. 打开QQ等通讯软件
  6. ctrl-v粘贴

可以看到一个小小的操作需要这么多步骤,而且需要在不同的窗口间频繁的切换,如果要复制的内容比较多,非常容易出错。而且,各种文本编辑器,为了达到所见即所得的效果,它的编辑区里面是有格式化字符的,比如制表符,换行、回车等。所以我们选中想拷贝的段落,是会连带编辑区中的字符一起拷贝过去的,这些隐藏的格式字符到了另外一个程序里面也许就会产生各种问题。我自己之前就曾经遇到过类似的问题,用过github的同学可能知道,github的权限管理是基于RSA公私钥体系的,这就需要我们把自己生成的公钥复制粘贴到浏览器上点击提交后再上传到github的服务器上,以便为后续的操作提供权限验证。我当时不论是打开编辑器后拷贝字符还是用cat将文件输出到console里面再复制粘贴过去,都不能成功,后来才知道是带了一些隐藏的格式化控制字符。
其实,剪贴板作为操作系统提供的一个功能,不管是windows、linux还是mac系统,除了GUI常见的鼠标加键盘复制粘贴的方法之后,肯定都会提供命令行操作的接口。如果你的工作中经常会用到命令行的工具,经常需要直接把命令的输出(比如grep/awk/sed/find或是你的程序输出结果)放到剪切板上,以便方便拷贝到QQ等IM软件上,那么下面的方法非常适合你。
好了,说了这么多终于要介绍使用方法了:

Mac

拷贝至剪贴板使用pbcopy

1
2
3
pbcopy < file.txt
#还支持管道的方式输出
echo 'Hello clip' | pbcopy

对应的粘贴使用pbpaste命令

1
2
pbpaste > file.txt
pbpaste | grep 'Hello'

Linux

许多网站可能可能比较倾向于使用xclip

1
echo 'Hello clip' | xclip

如果想粘贴到图形界面程序可能还要加参数

1
echo 'Hello clip' | xclip -selection clipboard

我觉得用这个很不方便,要区分linux里面几种剪贴板的类型。而且我使用过程中经常出现粘贴失败的问题,好在后来我找到了替代的工具xsel

1
2
3
4
echo 'Hello clip' | xsel
xsel < file.txt
#清空剪切板
xsel -c

windows

windws下的剪贴板工具命令为clip,简单好记

1
2
3
4
5
6
7
8
9
10
11
#将字符串Hello放入windows剪贴板
echo Hello | clip
#将dir命令的输出放入windows剪贴板
dir | clip
#将file.txt文件的文本放入windows剪贴板
clip < file.txt
#将windows剪贴板中的内容写入file.txt文件
clip > file.txt