它是可能的管道到/从剪贴板在Bash?
无论是连接到设备手柄还是使用辅助应用程序,我都找不到任何东西。
例如,如果/dev/clip是一个连接到剪贴板的设备,我们可以这样做:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
它是可能的管道到/从剪贴板在Bash?
无论是连接到设备手柄还是使用辅助应用程序,我都找不到任何东西。
例如,如果/dev/clip是一个连接到剪贴板的设备,我们可以这样做:
cat /dev/clip # Dump the contents of the clipboard
cat foo > /dev/clip # Dump the contents of "foo" into the clipboard
当前回答
下面是一个可以在多个平台上使用的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
其他回答
我找到了一个很好的参考:如何瞄准多个选择与xclip
在我的情况下,我想粘贴内容在剪贴板上,也看到什么被粘贴在那里,所以我也使用tee命令与文件描述符:
echo "just a test" | tee >(xclip -i -selection clipboard)
>()是进程替换的一种形式。Bash用连接到括号内程序的标准输入的文件描述符的路径替换它们。
tecommand将您的命令分叉,允许您“管道其内容”并在标准输出“stdout”上查看结果。
你也可以创建别名来获取和写在剪贴板上,允许你使用“pbcopy”和“pbpaste”,就像你在Mac上一样。在我的情况下,当我使用Z shell (zsh)时,我在我的别名文件中有这个:
(( $+commands[xclip] )) && {
alias pbpaste='xclip -i -selection clipboard -o'
alias pbcopy='xclip -selection clipboard'
}
Z shell中的(($+命令[name]))测试命令“name”是否安装在您的系统上,然后两个别名都用{}分组。&&是一个二进制AND;如果a,那么b,因此如果你有xclip,那么别名将被设置。
echo "another test" | tee >(pbcopy)
要获取剪贴板内容,只需输入:
pbpaste | "any-command-you-need-here"
Linux中有不同的剪贴板;X服务器有一个,窗口管理器可能有另一个,等等。没有标准的设备。
哦,是的,在CLI中,屏幕程序也有自己的剪贴板,就像Emacs和vi等其他一些应用程序一样。
在X中,您可以使用xclip。
你可以检查这个线程的其他可能的答案: http://unix.derkeiler.com/Newsgroups/comp.unix.shell/2004-07/0919.html
在这个线程中,有一个选项不需要安装任何gclip/xclip/xsel第三方软件。
Perl脚本(因为通常总是安装Perl)
use Win32::Clipboard;
print Win32::Clipboard::GetText();
安装xcopy实用程序,当你在终端中,输入:
Copy
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的用户在我的评论中给出了一个答案。既然我发现它很有帮助,我决定在回答中重申一遍。
在macOS系统下,请使用内置的pbcopy和pbpaste命令。
例如,如果你跑步
cat ~/.bashrc | pbcopy
~/的内容。可以使用Cmd + V快捷方式粘贴bashrc文件。
要保存当前剪贴板到一个文件,将输出pbpaste重定向到一个文件:
pbpaste > my_clipboard.txt