在 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】:
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试试
xclip
xclip - command line interface to X selections (clipboard)
man
【讨论】:
【参考方案3】:您可以处理大量剪贴板。我希望您可能是想要将内容放入 X Windows 主剪贴板的 Linux 用户。通常,您要与之交谈的剪贴板有一个实用程序可以让您与之交谈。
在 X 的情况下,有 xclip
(和其他)。 xclip -selection c
将发送数据到剪贴板,在大多数应用程序中可以使用 Ctrl + C、Ctrl + V .
如果您使用的是 Mac OS X,则有 pbcopy
。例如,cat example.txt | pbcopy
如果您处于 Linux 终端模式(无 X),请查看具有剪贴板的 gpm
或 Screen。试试屏幕命令readreg
。
在 Windows 10+ 或 Cygwin 下,使用 /dev/clipboard
或 clip
。
【讨论】:
cygwin: /dev/clipboard 在 Windows 上,/dev/clipboard
也适用于 Msys/MinGW bash shell
请注意,xclip -selection c
会将数据发送到剪贴板,在大多数应用程序中与 ^C、^V 配合使用
在较新的 Windows 版本上,您可以像这样使用clip
:dir | clip
遗憾的是 GNU/Linux 没有像 /dev/clipboard
这样的设备,并且强制安装 xclip 或者 gpm 至少在 Kubuntu 中默认缺少 (我猜在大多数其他发行版).【参考方案4】:
确保您使用的是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
。【参考方案5】:
在 macOS 上,使用内置的 pbcopy
和 pbpaste
命令。
例如,如果你运行
cat ~/.bashrc | pbcopy
~/.bashrc
文件的内容可以通过 Cmd + V 快捷方式粘贴。
要将当前剪贴板保存到文件,请将输出 pbpaste
重定向到文件:
pbpaste > my_clipboard.txt
【讨论】:
【参考方案6】:在 Windows(使用 Cygwin)上尝试
cat /dev/clipboard
或 echo "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【参考方案7】:
在 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)。
【讨论】:
【参考方案8】:这是一个即用型 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
【讨论】:
【参考方案9】:我多年前编写的一些 Windows 程序。它们允许您转储、推送、附加和打印剪贴板。它的工作原理是这样的:
dumpclip | perl -pe "s/monkey/chimp/g;" | pushclip
包含源码:cmd_clip.zip
【讨论】:
【参考方案10】:仅适用于 Mac:
echo "Hello World" | pbcopy
pbpaste
它们位于/usr/bin/pbcopy
和/usr/bin/pbpaste
。
【讨论】:
【参考方案11】:安装
# You can install xclip using `apt-get`
apt-get install xclip
# or `pacman`
pacman -S xclip
# or `dnf`
dnf install xclip
如果您无权访问apt-get
、pacman
或dnf
,则可以在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 实例以应用更改。
用法
您现在可以使用setclip
和getclip
,例如:
$ 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
的发行版特定修改。 (我见过特定于发行版的.bashrc
s 导入.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【参考方案12】:
这是一个简单的 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 的答案相同。
这似乎没有设置剪贴板变量,所以我无法将内容粘贴到其他应用程序中 - 它不是真正的剪贴板!【参考方案13】:
xsel -b
为 X Window 做这项工作,而且它大部分已经安装。 看看xsel 的手册页是值得的。
【讨论】:
【参考方案14】: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有一些答案,但主要是xsel
和xclip
在各方面都是等效的,除了xclip
可以按名称读/写文件,但xsel
需要如果你想访问一个文件,shell 重定向。
xsel
在脚本中运行良好,而 xclip
仅在提示符下运行。不知道为什么。
也可用于基于 Redhat 的系统。在像 xclip 这样的脚本中使用时不会奇怪地阻塞。【参考方案15】:
如果您像我一样在没有 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 选择在服务器环境中有用。【参考方案16】:
还有xclip-copyfile。
【讨论】:
【参考方案17】:昨天我发现自己有一个问题:“如何在不同的用户会话之间共享剪贴板?”。使用 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
。【参考方案18】:
有几种方法。已经提到的一些方法包括(我认为)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
的任何安装似乎都附带两个程序:xclip
和 xsel
(有点像它同时附带 startx
和 xinit
)。大多数其他答案都提到了xclip
,我真的很喜欢xsel
,因为它简洁,所以我将介绍xsel
。
来自xsel(1x):
输入选项\
-a, --append \
将标准输入附加到选择中。暗示 -i。
-f, --follow \
随着标准输入的增长附加到选择。暗示 -i。
-i, --输入\
将标准输入读入选择。
输出选项\
-o, --输出\
将选择写入标准输出。
操作选项\
-c, --clear \
清除选择。覆盖所有输入选项。
-d, --delete \
请求删除当前选择。这不仅清除了选择,而且还向选择所在的程序请求删除选择的内容。覆盖所有输入选项。
选择选项\
-p, --primary \
对 PRIMARY 选择进行操作(默认)。
-s,--二级\
对 SECONDARY 选择进行操作。
-b, --剪贴板\
对剪贴板选择进行操作。
这就是您需要知道的全部内容。 p
(或无)用于PRIMARY
,s
用于SECONDARY
,b
用于CLIPBOARD
,o
用于输出。
示例:假设我想从 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 PRIMARY
和CLIPBOARD
选项。这两个选项可分别从*
和+
寄存器访问,并且可以像任何其他寄存器一样在您空闲时写入和读取。
例如:
:%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+
。【参考方案19】:
从这个帖子中,有一个选项不需要安装任何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。【参考方案20】:在 macOS 中,使用 pbpaste
。
例如:
更新剪贴板
pbpaste | ruby -ne ' puts "\|" + $_.split( )[1..4].join("\|") ' | pbcopy
【讨论】:
【参考方案21】:安装 xcopy 实用程序,然后在终端中输入:
复制
Thing_you_want_to_copy | xclip -selection c
粘贴
myvariable=$(xclip -selection clipboard -o)
我注意到很多答案推荐 pbpaste 和 pbcopy。如果您喜欢这些实用程序,但由于某种原因它们在您的存储库中不可用,您总是可以为 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对应得很好。【参考方案22】:在Windows Subsystem for Linux (WSL) 上,您可以使用 clip.exe 复制到剪贴板:
cat file | clip.exe
请记住使用|
管道命令。而不是>
命令,因为这不起作用。
【讨论】:
这也适用于 gitbash。【参考方案23】: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太多了【参考方案24】:
我找到了一个很好的参考:How to target multiple selections with xclip
就我而言,我想将内容粘贴到剪贴板上并查看粘贴的内容,因此我还使用了带有文件描述符的tee
命令:
echo "just a test" | tee >(xclip -i -selection clipboard)
>()
是一种进程替换形式。 Bash 用括号内连接到程序标准输入的文件描述符的路径替换每个。
tee
command 分叉您的命令,允许您“通过管道传输其内容”并在标准输出“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”,然后将两个别名与 组合在一起。
&&
是一个二进制AND;如果 a 则 b,因此如果您有 xclip,则将设置别名。
echo "another test" | tee >(pbcopy)
要获取剪贴板内容,只需键入:
pbpaste | "any-command-you-need-here"
【讨论】:
【参考方案25】:在 Linux 中这是可行的:
cat filename | xclip
【讨论】:
但之前的答案已经涵盖了(?)。【参考方案26】:pbcopy 内置于 OS X:
复制文件.bash_profile的内容:
cat ~/.bash_profile | pbcopy
【讨论】:
【参考方案27】: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:" 或类似的 - 答案应该看起来像是今天写的)。【参考方案28】:
在Wayland 上,xcopy 似乎不起作用。请改用wl-clipboard。
例如,Fedora:
sudo dnf install wl-clipboard
tree | wl-copy
wl-paste > file
【讨论】:
【参考方案29】:此函数将测试剪贴板存在并使用它。
验证复制粘贴到你的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
【讨论】:
【参考方案30】:我刚刚在 KDE 环境中搜索了相同的内容。
请随意使用clipcopy
和clippaste
。
KDE:
> echo "TEST CLIP FROM TERMINAL" | clipcopy
> clippaste
TEST CLIP FROM TERMINAL
【讨论】:
以上是关于在 Bash 脚本中通过管道传入/传出剪贴板的主要内容,如果未能解决你的问题,请参考以下文章