在 Bash 脚本中通过管道传入/传出剪贴板

Posted

技术标签:

【中文标题】在 Bash 脚本中通过管道传入/传出剪贴板【英文标题】:Pipe to/from the clipboard in a Bash script 【发布时间】:2010-10-19 11:18:02 【问题描述】:

是否可以在 Bash 中与剪贴板进行管道传输?

无论是通过管道连接到设备句柄还是使用辅助应用程序,我都找不到任何东西。

例如,如果/dev/clip 是一个链接到剪贴板的设备,我们可以这样做:

cat /dev/clip        # Dump the contents of the clipboard
cat foo > /dev/clip  # Dump the contents of "foo" into the clipboard

【问题讨论】:

我一直在 vim 中使用:%y+,这是 vim 所说的“将所有行拉到 '+' 寄存器(X PRIMARY 剪贴板)”。如果您想具体一点,可以用范围替换 %。但是有三个警告: 1. 现在,您必须先将任何文本保存到文件中,然后才能复制它。这与答案中提到的xclip 命令形成对比。 2. 如果你还不知道如何 vim,这可能会很乏味。 3.只有在编译vim时启用了某个功能才可以这样做。如果你安装了 GVim,它应该在 vim 的 GUI 和终端实例中默认启用。 @BradenBest 你应该把它作为答案。我在 NIX 环境中,无法安装 xclip。你的回答就像一个魅力。 @HankCa 好的,我发布了an answer。告诉我你的想法。 @BradenBest 这是一个非常全面的答案。我只是喜欢:%y+ 一个,但是好的,你已经涵盖了所有的基础!不错。 另一种选择:使用一点 perl 脚本:不需要安装。见my answer below。 【参考方案1】:

您可以处理大量剪贴板。我希望您可能是想要将内容放入 X Windows 主剪贴板的 Linux 用户。通常,您要与之交谈的剪贴板有一个实用程序可以让您与之交谈。

在 X 的情况下,有 xclip(和其他)。 xclip -selection c 将发送数据到剪贴板,在大多数应用程序中可以使用 Ctrl + CCtrl + V .

如果您使用的是 Mac OS X,则有 pbcopy。例如,cat example.txt | pbcopy

如果您处于 Linux 终端模式(无 X),请查看具有剪贴板的 gpm 或 Screen。试试屏幕命令readreg

在 Windows 10+ 或 Cygwin 下,使用 /dev/clipboardclip

【讨论】:

cygwin: /dev/clipboard 在 Windows 上,/dev/clipboard 也适用于 Msys/MinGW bash shell 请注意,xclip -selection c 会将数据发送到剪贴板,在大多数应用程序中与 ^C、^V 配合使用 在较新的 Windows 版本上,您可以像这样使用clipdir | clip 遗憾的是 GNU/Linux 没有像 /dev/clipboard 这样的设备,并且强制安装 xclip 或者 gpm 至少在 Kubuntu 中默认缺少 (我猜在大多数其他发行版).【参考方案2】:

确保您使用的是alias xclip="xclip -selection c" 否则您将无法使用 Ctrl+v 进行粘贴。

示例: 运行echo -n test | xclip后,Ctrl+v会粘贴test

【讨论】:

如何在没有那个命令参数的情况下粘贴它? xclip -selection clipboard -o 因为我经常在 osx 和 linux 之间来回走动,所以我的 dotfiles 中有以下内容。 alias pbcopy="xclip -selection c"alias pbpaste="xclip -selection clipboard -o"希望对您有所帮助。 @ApockofFork,xclip 不是添加换行符,echo 是。试试printf test | xclip -i -selection clipboard。 (printf 不会添加换行符,除非你写 'test\n'。) 或者用echo -n代替printf【参考方案3】:

安装

# You can install xclip using `apt-get`
apt-get install xclip

# or `pacman`
pacman -S xclip

# or `dnf`
dnf install xclip

如果您无权访问apt-getpacmandnf,则可以在sourceforge 上获得资源。

设置

重击

~/.bash_aliases,添加:

alias setclip="xclip -selection c"
alias getclip="xclip -selection c -o"

不要忘记使用. ~/.bash_aliases 或重新启动您的配置文件来加载您的新配置。

~/.config/fish/config.fish,添加:

abbr setclip "xclip -selection c"
abbr getclip "xclip -selection c -o"

不要忘记通过重新启动终端来重新启动您的 fish 实例以应用更改。

用法

您现在可以使用setclipgetclip,例如:

$ echo foo | setclip
$ getclip
foo

【讨论】:

对于所有其他发行版:您可以从sourceforge.net/projects/xclip下载源代码 +1 最佳解决方案!在 Arch 中,sudo pacman -S xclip。但请注意.bashrc 不是最好的地方。我建议最终用户阅读正确的 bashrc、bash_aliases 和 .profile 文件以及 bash 如何处理每个文件。提示:改为将其放在 .bash_aliases 中。 感谢@eduncan911! :) 添加了使用pacman 包管理器的选项并删除了.bashrc 命题。我知道.bash_aliases 更适应,但最终结果是相同的(.bashrc 只需要.bash_aliases,如果它存在)。如果人们想要一个凌乱的系统,就让他们拥有一个。 :) @eduncan911 我在 bash 手册中找不到提到 .bash_aliases。我相信这一定是对.bashrc 的发行版特定修改。 (我见过特定于发行版的.bashrcs 导入.bash_profile(如果存在)。)基于此,我想说.bash_aliases 不是通用约定,但对于拥有它的人来说是一种方便的速记。跨度> @jpaugh 你是对的。最后是我的.bashrc 来源.bash_aliases。 ;) 我遵循这个旧约定,它在 Arch、Ubuntu/Debian、Raspberry 变体、macOS/OSX 和 Windows Bash 之间保持 100% 兼容:stefaanlippens.net/my_bashrc_aliases_profile_and_other_stuff 按照这个约定,我在我接触的所有机器上使用完全相同的点文件.挺好看的:github.com/eduncan911/dotfiles【参考方案4】:

在 macOS 上,使用内置的 pbcopypbpaste 命令。

例如,如果你运行

cat ~/.bashrc | pbcopy

~/.bashrc 文件的内容可以通过 Cmd + V 快捷键粘贴。

要将当前剪贴板保存到文件,请将输出 pbpaste 重定向到文件:

pbpaste > my_clipboard.txt

【讨论】:

【参考方案5】:

2018年答案

使用clipboard-cli。它适用于 macOS、Windows、Linux、OpenBSD、FreeBSD 和 android,没有任何实际问题。

安装它:

npm install -g clipboard-cli

那么你可以这样做:

echo foo | clipboard 

如果您愿意,您可以通过在您的 .bashrc.bash_profile.zshrc 中输入以下内容来别名为 cb

alias cb=clipboard

【讨论】:

你确定这是一个安全的npm 包吗? @Stas,我希望如此,它是由最多产的节点贡献者 Sindresorhus (github.com/sindresorhus) 制作的。他负责 Ava 测试库、xo linter、Yeoman 和无数其他项目。他还负责无数像这样的小型库,这些库将他的代码放在互联网上几乎所有使用 JS 的网站上。这并不是说他不能妥协。只是他的 repos 的关注度和他自己的声誉使得它比大多数随机 npm repos 的可能性要小得多。 酷!在 xclip 不工作的 Ubuntu GNU/Linux 上工作。 虽然它不适用于 WSL——windows 中的 linux。 周围的JS太多了【参考方案6】:

xsel 在 Debian/Ubuntu/Mint 上

# append to clipboard:
cat 'the file with content' | xsel -ab

# or type in the happy face :) and ...
echo 'the happy face :) and content' | xsel -ib

# show clipboard
xsel -ob

# Get more info:
man xsel

安装

sudo apt-get install xsel

【讨论】:

这与echo "foo" | xclip -selection c有何不同? 关于这个Ask Ubuntu answer有一些答案,但主要是xselxclip在各方面都是等效的,除了xclip可以按名称读/写文件,但xsel需要如果你想访问一个文件,shell 重定向。 xsel 在脚本中运行良好,而 xclip 仅在提示符下运行。不知道为什么。 也可用于基于 Redhat 的系统。在像 xclip 这样的脚本中使用时不会奇怪地阻塞。【参考方案7】:

试试

xclip

xclip - command line interface to X selections (clipboard) 

man

【讨论】:

【参考方案8】:

在Windows Subsystem for Linux (WSL) 上,您可以使用 clip.exe 复制到剪贴板:

cat file | clip.exe

请记住使用| 管道命令。而不是> 命令,因为这不起作用。

【讨论】:

这也适用于 gitbash。【参考方案9】:

安装 xcopy 实用程序,然后在终端中输入:

复制

Thing_you_want_to_copy | xclip -selection c

粘贴

myvariable=$(xclip -selection clipboard -o)

我注意到很多答案推荐 pbpastepbcopy。如果您喜欢这些实用程序,但由于某种原因它们在您的存储库中不可用,您总是可以为 xcopy 命令创建一个别名并将它们称为 pbpaste 和 pbcopy。

alias pbcopy="xclip -selection c"
alias pbpaste="xclip -selection clipboard -o"

那么它看起来像这样:

Thing_you_want_to_copy | pbcopy
myvariable=$(pbpaste)

位于一个名为 doug 的用户为我写的 cmets 中的答案。因为我觉得它很有帮助,所以我决定在答案中重申。

【讨论】:

太好了,你的别名部分与MacOS对应得很好。【参考方案10】:

这是一个即用型 Bash 脚本,用于读取适用于多个平台的剪贴板。

如果您添加功能(例如,更多平台),请在此处编辑脚本。

#!/bin/bash
# WF 2013-10-04
#
# Multi-platform clipboard read access
#
# Supports
#   Mac OS X
#   Git shell / Cygwin (Windows)
#   Linux (e.g., Ubuntu)

#
# Display an error
#
error() 
  echo "error: $1" 1>&2
  exit 1


#
# getClipboard
#
function getClipboard() 
 os=`uname`
      case $os in
        # Git Bash  (Windows)
        MINGW32_NT-6.1)
          cat /dev/clipboard;;
        # Mac OS X
        Darwin*)
          pbpaste;;
        # Linux
        Linux*)
          # Works only for the X clipboard - a check that X is running might be due
          xclip -o;;
        *)
          error "unsupported os $os";;
      esac


tmp=/tmp/clipboard$$
getClipboard >$tmp
cat $tmp
# Comment out for debugging
rm $tmp

【讨论】:

【参考方案11】:

仅适用于 Mac:

echo "Hello World" | pbcopy
pbpaste

它们位于/usr/bin/pbcopy/usr/bin/pbpaste

【讨论】:

【参考方案12】:

在 Windows(使用 Cygwin)上尝试 cat /dev/clipboardecho "foo" > /dev/clipboard 如本文所述。

【讨论】:

正如用户@maep 在另一条评论中提到的那样,较新版本的 Windows(我只能确认 Win10)可以简单地通过管道传输到 clip。我正在使用 msysgit 1.9.5,这很有效。 echo "foo" > /dev/clipboard 似乎完全破坏了换行符(不是 \r\n \n 事情,而是完全消失了) 链接断开修复(无法编辑):pgrs.net/2008/01/11/command-line-clipboard-access【参考方案13】:

Linux 中有不同的剪贴板; X 服务器有一个,窗口管理器可能有另一个,等等。没有标准设备。

哦,是的,在 CLI 上,屏幕程序也有自己的剪贴板,还有一些其他应用程序,如 Emacs 和 vi。

在 X 中,您可以使用xclip。

您可以查看此线程以获取其他可能的答案: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html

【讨论】:

听起来创建 /dev/clip 对某人来说是个好项目。 我完全了解多个剪贴板。这如何使我的问题更难回答? 如果剪贴板是标准化的,这将是有意义的,如果您可以使用 /dev/clip1, /dev/clip2 .. /dev/clip 来访问它们,可能不会有什么坏处,唯一的问题是它们是用户特定的,设备是系统范围的。但是如果你制作一个根据访问 UID 进行掩码的内核设备驱动程序,它应该可以按预期工作。【参考方案14】:

这是一个简单的 Python 脚本,可以满足您的需要:

#!/usr/bin/python

import sys

# Clipboard storage
clipboard_file = '/tmp/clipboard.tmp'

if(sys.stdin.isatty()): # Should write clipboard contents out to stdout
    with open(clipboard_file, 'r') as c:
        sys.stdout.write(c.read())
elif(sys.stdout.isatty()): # Should save stdin to clipboard
    with open(clipboard_file, 'w') as c:
        c.write(sys.stdin.read())

将其保存为路径中某处的可执行文件(我将其保存到/usr/local/bin/clip。您可以通过管道输入要保存到剪贴板的内容...

echo "Hello World" | clip

您可以将剪贴板中的内容通过管道传输到其他程序...

clip | cowsay
 _____________
< Hello World >
 -------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

单独运行它只会输出剪贴板中的内容。

【讨论】:

这在您使用单台计算机时有效,但不允许您在计算机之间复制内容。 似乎只有 ` echo str > tmpfile` 和 cat tmpfile ,而不是剪贴板操作。 //与@horta 的答案相同。 这似乎没有设置剪贴板变量,所以我无法将内容粘贴到其他应用程序中 - 它不是真正的剪贴板!【参考方案15】:

在 Windows (Cygwin) 中复制并粘贴到剪贴板:

见:

$ clip.exe -?

CLIP
Description:
    Redirects output of command line tools to the Windows clipboard.
    This text output can then be pasted into other programs.
Parameter List:
/?                  Displays this help message.
Examples:
DIR | CLIP          Places a copy of the current directory
                        listing into the Windows clipboard.
CLIP < README.TXT   Places a copy of the text from readme.txt
                        on to the Windows clipboard.

还有getclip(可以用来代替Shift + Ins!)和putclip(echo oaeuoa | putclip.exe 放入clip)。

【讨论】:

【参考方案16】:

我找到了一个很好的参考:How to target multiple selections with xclip

就我而言,我想将内容粘贴到剪贴板上并查看粘贴的内容,因此我还使用了带有文件描述符的tee 命令:

echo "just a test" | tee >(xclip -i -selection clipboard)

&gt;() 是一种进程替换形式。 Bash 用括号内连接到程序标准输入的文件描述符的路径替换每个。

teecommand 分叉您的命令,允许您“通过管道传输其内容”并在标准输出“stdout”上查看结果。

您还可以创建别名来获取和写入剪贴板,让您可以像在 Mac 上一样使用“pbcopy”和“pbpaste”。就我而言,当我使用 Z shell (zsh) 时,我的别名文件中有这个:

(( $+commands[xclip] )) && 
    alias pbpaste='xclip -i -selection clipboard -o'
    alias pbcopy='xclip -selection clipboard'

Z shell 中的(( $+command[name] )) 测试您的系统上是否安装了命令“name”,然后将两个别名与 组合在一起。 &amp;&amp; 是一个二进制AND;如果 a 则 b,因此如果您有 xclip,则将设置别名。

echo "another test" | tee >(pbcopy)

要获取剪贴板内容,只需键入:

pbpaste | "any-command-you-need-here"

【讨论】:

【参考方案17】:

pbcopy 内置于 OS X:

复制文件.bash_profile的内容:

cat ~/.bash_profile | pbcopy

【讨论】:

【参考方案18】:
  xsel -b

为 X Window 完成这项工作,并且它大部分已经安装。 看看xsel 的手册页是值得的。

【讨论】:

【参考方案19】:

有几种方法。已经提到的一些方法包括(我认为)tmux、Screen、Vim、Emacs 和 shell。我不了解 Emacs 或 Screen,所以我将介绍其他三个。

Tmux

虽然不是 X 选择,但 tmux 具有可通过 prefix-[ 访问的复制模式(prefix 默认为 Ctrl + B)。用于此模式的缓冲区是 tmux 的独立和专有的,这开辟了很多可能性,并且在适当的情况下使其比 X 选择更通用。

要退出这个模式,点击Q;导航,使用你的 Vim 或 Emacs 绑定(默认 = Vim),所以hjkl 用于移动,v/V/C-v 用于字符/行/块选择等。当您选择时,点击 Enter复制并退出模式。

要从此缓冲区粘贴,请使用prefix-]

外壳

默认情况下,X11 的任何安装似乎都附带两个程序:xclipxsel(有点像它同时附带 startxxinit)。大多数其他答案都提到了xclip,我真的很喜欢xsel,因为它简洁,所以我将介绍xsel

来自xsel(1x):

输入选项\

-a, --append \

将标准输入附加到选择中。暗示 -i

-f, --follow \

随着标准输入的增长附加到选择。暗示 -i

-i, --输入\

将标准输入读入选择。

输出选项\

-o, --输出\

将选择写入标准输出。

操作选项\

-c, --clear \

清除选择。覆盖所有输入选项。

-d, --delete \

请求删除当前选择。这不仅清除了选择,而且还向选择所在的程序请求删除选择的内容。覆盖所有输入选项。

选择选项\

-p, --primary \

对 PRIMARY 选择进行操作(默认)。

-s,--二级\

对 SECONDARY 选择进行操作。

-b, --剪贴板\

对剪贴板选择进行操作。

这就是您需要知道的全部内容。 p(或无)用于PRIMARYs 用于SECONDARYb 用于CLIPBOARDo 用于输出。

示例:假设我想从 TTY 复制 foo 的输出并将其粘贴到网页以获取错误报告。为此,理想的做法是复制到 TTY/X 会话/从 TTY/X 会话复制。所以问题变成了我如何从 TTY 访问剪贴板?

对于本例,我们假设 X 会话正在显示 :1

$ foo -v
Error: not a real TTY
details:
blah blah @ 0x0000000040abeaf4
blah blah @ 0x0000000040abeaf8
blah blah @ 0x0000000040abeafc
blah blah @ 0x0000000040abeb00
...
$ foo -v | DISPLAY=:1 xsel -b # copies it into clipboard of display :1

然后我可以像往常一样将其 Ctrl + V 放入表单中。

现在假设支持站点上的某个人给了我一个运行命令来解决问题。复杂而漫长。

$ DISPLAY=:1 xsel -bo
sudo foo --update --clear-cache --source-list="http://foo-software.com/repository/foo/debian/ubuntu/xenial/164914519191464/sources.txt"
$ $(DISPLAY=:1 xsel -bo)
Password for braden:
UPDATING %%%%%%%%%%%%%%%%%%%%%%% 100.00%
Clearing cache...
Fetching sources...
Reticulating splines...
Watering trees...
Climbing mountains...
Looking advanced...
Done.
$ foo
Thank you for your order. A pizza should arrive at your house in the next 20 minutes. Your total is $6.99

Pizza ordering 似乎是对命令行的有效使用。

...继续前进。

Vim

如果用+clipboard 编译(这很重要!检查你的vim --version),Vim 应该可以访问X PRIMARYCLIPBOARD 选项。这两个选项可分别从*+ 寄存器访问,并且可以像任何其他寄存器一样在您空闲时写入和读取。

例如:

:%y+    ; copy/yank (y) everything (%) into the CLIPBOARD selection (+)
"+p     ; select (") the CLIPBOARD selection (+) and paste/put it
ggVG"+y ; Alternative version of the first example

但是,如果您的 Vim 副本不直接支持访问 X 选择,那也不是世界末日。您可以使用上一节所述的xsel 技术。

:r ! xsel -bo ; read  (r) from the stdout of (!) `xsel -bo`
:w ! xsel -b  ; write (w) to the stdin of    (!) `xsel -b`

绑定几个键组合,你应该很好。

【讨论】:

当从非 X 环境调用 X 应用程序时,一定要记得使用 DISPLAY=。 X 应用程序需要DISPLAY 环境变量来确定它们正在与哪个服务器(或者只有一个服务器处理多个会话?)。例如,从 TTY 尝试 DISPLAY=:1 firefox(或任何您的显示 ID;我的恰好是 :1)。 对我来说,我的环境中的选择是 VIM 中的:%y+【参考方案20】:

我刚刚在 KDE 环境中搜索了相同的内容。

请随意使用clipcopyclippaste

KDE:

> echo "TEST CLIP FROM TERMINAL" | clipcopy
> clippaste
TEST CLIP FROM TERMINAL

【讨论】:

【参考方案21】:

在 Linux 中这是可行的:

cat filename | xclip

【讨论】:

但之前的答案已经涵盖了(?)。【参考方案22】:

我多年前编写的一些 Windows 程序。它们允许您转储、推送、附加和打印剪贴板。它的工作原理是这样的:

dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip

包含源码:cmd_clip.zip

【讨论】:

【参考方案23】:

从这个帖子中,有一个选项不需要安装任何gclip/xclip/xsel 第三方软件。

Perl 脚本(因为通常总是安装 Perl)

use Win32::Clipboard;
print Win32::Clipboard::GetText();

【讨论】:

我将如何使用它?将脚本保存到 PATH 并通过管道输入?我正在尝试编写 Dropbox cli 包装器来复制共享链接,所以我只需要它来处理文本。 @jena 示例:metacpan.org/pod/Win32::Clipboard 或 perlmonks.org/?node_id=143637 或 bribes.org/perl/docfr/win32clipboard.html。【参考方案24】:

Ruby oneliner 激励我尝试使用 Python。

假设我们想要一个将剪贴板中的任何内容缩进四个空格的命令。它非常适合在 *** 上共享 sn-ps。

$ pbpaste | python -c "import sys
 for line in sys.stdin:
   print(f'    line')" | pbcopy

这不是错字。 Python 需要换行符来执行 for 循环。我们希望一次更改行数,以避免在内存中建立额外的数组。

如果您不介意构建额外的数组,请尝试:

$ pbpaste | python -c "import sys; print(''.join([f'    l' for l in sys.stdin]))" | pbcopy

但老实说,awk 在这方面比 python 更好。我在~/.bashrc 文件中定义了这个别名

alias indent="pbpaste | awk 'print \"    \"\$0' | pbcopy"

现在,当我运行 indent 时,剪贴板中的任何内容都会缩进。

【讨论】:

您可以去掉括号并使用生成器表达式而不是列表推导式。 ''.join(f' l' for l in sys.stdin)——对于大多数人来说,python 将指向 MacOS 上的 python2。因此,您可能需要指定 python3 什么是“Ruby oneliner”?你指的是什么?另一个答案?或者是其他东西?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。【参考方案25】:

在 macOS 中,使用 pbpaste

例如:

更新剪贴板

pbpaste  | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy

【讨论】:

【参考方案26】:

在Wayland 上,xcopy 似乎不起作用。请改用wl-clipboard。

例如,Fedora:

sudo dnf install wl-clipboard

tree | wl-copy

wl-paste > file

【讨论】:

【参考方案27】:

还有xclip-copyfile。

【讨论】:

【参考方案28】:

如果您像我一样在没有 root 权限的 Linux 服务器上运行并且没有任何 xclip 或 GPM 您可以通过使用临时文件来解决此问题。例如:

$ echo "Hello, World!" > ~/clip
$ echo `cat ~/clip`
Hello, World!

【讨论】:

我不明白缺乏 root 权限是如何影响这一点的。 @BradenBest 缺少 root 权限意味着我无法安装东西。 但是你会安装什么? X?在服务器上?除非您托管一些奇怪的 X 转发服务,否则我看不出您为什么要这样做。 @BradenBest 不确定。任何程序或服务都可以让我执行复制粘贴。 好吧,如果您使用任何X selections(“剪贴板”和任何提及 xclip/xsel 都必然暗示),您需要一个活动的 X 会话(因此需要一个 X服务器),以便您可以首先访问选择。要了解我的意思,请尝试在本地计算机上运行 DISPLAY="" xsel。它将在错误时退出,无法找到会话"",并且不会与任何 X 选择进行交互。这就是为什么我最初说我看不到 root 权限是如何影响这一点的:root 或没有 root,您不太可能发现 X 选择在服务器环境中有用。【参考方案29】:

昨天我发现自己有一个问题:“如何在不同的用户会话之间共享剪贴板?”。使用 Ctrl + Alt + F7 - Ctrl + Alt + 在会话之间切换时F8,其实复制的东西不能粘贴。

我提出了以下基于命名管道的快速而肮脏的解决方案。它肯定很裸露和原始,但我发现它很实用:

user1@host:~$ mkfifo /tmp/sharedClip

然后在发送端

user1@host:~$ cat > /tmp/sharedClip

最后,在接收端:

user2@host:~$ cat /tmp/sharedClip

现在,您在第一个终端中键入或粘贴任何内容,并且(在点击 Return 后),它将立即出现在接收终端中,您可以从那里再次复制并粘贴到您喜欢的任何地方。

当然,这不仅仅严格地从用户 1 的剪贴板中获取内容以使其在用户 2 的剪贴板中可用,而是需要额​​外的一对粘贴和复制点击。

【讨论】:

似乎并不太令人惊讶。两个不同的 X 服务器 = 两个不同的选择集。但是,您可以设置一个通过xsel/xclip 进行输入/输出的脚本。例如,一端侦听是否有任何选择发生了变化,然后自动将其(通过命名的 FIFO)通过管道传递给正在侦听一个或多个管道的另一个脚本,后者将其插入到自己的 X 选择中。因此,复制文本会自动导致相同的文本出现在另一个 X 会话的选择中。不要忘记$DISPLAY【参考方案30】:

此函数将测试剪贴板存在并使用它。

验证复制粘贴到你的shell,然后调用函数clippaste

clippaste () 
    if [[ $OSTYPE == darwin* ]]
    then
            pbpaste
    elif [[ $OSTYPE == cygwin* ]]
    then
            cat /dev/clipboard
    else
            if command -v xclip &> /dev/null
            then
                    xclip -out -selection clipboard
            elif command -v xsel
            then
                    xsel --clipboard --output
            else
                    print "clipcopy: Platform $OSTYPE not supported or xclip/xsel not installed" >&2
                    return 1
            fi
    fi

【讨论】:

以上是关于在 Bash 脚本中通过管道传入/传出剪贴板的主要内容,如果未能解决你的问题,请参考以下文章

从 Git Bash 管道输出到剪贴板

使用 Bash for Windows 复制到剪贴板

图像拷贝和粘贴-使用剪贴板

如何在 Windows 上的 Bash 的 vim 中“复制到剪贴板”? [关闭]

如何从远程 SSH 会话将数据发送到本地剪贴板

鼠标选择后如何从 tmux 输出复制到系统剪贴板?