如何通过管道将终端标准输出 (stdout) 传送到剪贴板?

Ins*_*tus 133 command-line clipboard pipe

例如,

假设我想列出一个文件夹的内容,并直接将它们粘贴到聊天窗口中供朋友查看。

我意识到我可以ls > filename.txt用这些内容创建一个文件 (filename.txt);然后我必须打开或打印文件并手动选择和复制文本块这可能很烦人/乏味。)我显然也可以ls直接从终端窗口中选择和复制输出。

简单地将标准输出通过管道传输到剪贴板会更快/更容易

什么终端命令允许我这样做?

Ins*_*tus 160

这可以通过xselxclip 命令行实用程序来完成 。由于默认情况下这两个程序都没有随 Ubuntu 一起提供,因此您需要先通过 Ubuntu 软件或终端安装它们。这是在终端中的方法(但请记住,您只需要这两个中的一个。)

sudo apt install xsel
sudo apt install xclip
Run Code Online (Sandbox Code Playgroud)

注意:如果您在 Windows Subsystem for Linux (WSL) 中使用 Ubuntu,请参阅其他答案

现在举一些例子。如果要将 的输出复制ls到剪贴板,请执行以下操作:

使用 xsel:

ls | xsel -ib
Run Code Online (Sandbox Code Playgroud)

使用 xclip:

ls | xclip -sel clip
Run Code Online (Sandbox Code Playgroud)

这当然也可以用于其他终端命令。假设您想将您的网络信息粘贴到帮助论坛中。

使用 xsel:

sudo lshw -C network | xsel -ib
Run Code Online (Sandbox Code Playgroud)

使用 xclip:

sudo lshw -C network | xclip -sel clip
Run Code Online (Sandbox Code Playgroud)

使用新的 bash 别名使这更容易!

编辑您的~/.bash_aliases文件(如果它不存在,请先使用touch ~/.bash_aliases

然后添加以下一项(取决于您决定使用哪个程序):

alias copy='xclip -sel clip'
Run Code Online (Sandbox Code Playgroud)

或者

alias copy='xsel -ib'
Run Code Online (Sandbox Code Playgroud)

然后保存并关闭。

现在(重新启动终端后)您可以将标准输出发送到剪贴板,只需将其通过管道传输到“复制”(或您决定命名新别名的任何内容)

例如:

ls | copy
Run Code Online (Sandbox Code Playgroud)

  • 您不必重新启动终端;你可以只`source ~/.bash_aliases` (3认同)
  • 对于较新的 Ubuntu 版本,您应该使用 `apt`。所以`sudo apt install xsel`或`sudo apt install xclip`。 (2认同)
  • 如果您还想捕获stderr(除了stdout之外,您的命令可能发生的错误),您必须使用例如`ls nonexisting_file 2>&1 | xclip -sel剪贴板`,意味着您将stderr重定向到stdout。 (2认同)

Sna*_*hot 10

如果您尝试在 Windows 子系统 Linux (WSL) 中使用 Ubuntu 复制到剪贴板,则 xsel 或 xclip 将不起作用,除非您使用 X Windows,因为剪贴板仅用于图形。但是,要将终端标准输出通过管道传输到 WSL Ubuntu 中的剪贴板,您可以使用clip.exe. 然后,您可以使用标准粘贴命令粘贴到 WSL Ubuntu 终端中,复制的文本也将在 Windows 中可用。例如,

pwd | clip.exe 
Run Code Online (Sandbox Code Playgroud)

将当前工作目录复制到 (Windows) 剪贴板。

当寻找在 WSL 中复制/粘贴文本的方法时,此搜索结果出现在顶部,因此我认为值得一提的是,这样读者就不必在 Ubuntu 中不必要地安装 xsel 或 xclip 而是使用clip.exe.