在Windows下使用Bash复制到剪贴板

53

如何直接将命令行中的结果复制到剪贴板?

在Windows的cmd.exe上,我可以简单地执行echo "asd" | clip,它会将输出内容传输到剪贴板。

我尝试安装xclip来实现这个功能,虽然它已经编译完成,但调用时却打印出以下信息:

Error: Can't open display: (null)

使用鼠标并不是解决办法。

使用鼠标是否是一个选项?如果是的话,只需突出显示文本即可。 - mattferderer
绝对不是,我谷歌搜索了很多类似的建议 :) - Marek Lewandowski
对于熟悉将复制和粘贴结合起来的 xclip 的用户,您可能会对 paste 命令 感兴趣。 - Att Righ
4个回答

95

如果您在WSL控制台中想要复制某些内容到剪贴板,请在Windows cmd中使用的操作后面添加 '.exe'。此功能适用于Build 14393或更高版本。

echo "aaa"|clip.exe
从剪贴板中读取内容:
powershell.exe -command "Get-Clipboard"

很酷,升级到WSL/Ubuntu 16后即可开箱即用! - Marek Lewandowski
3
我用echo命令行没有成功,但使用cat命令行能够成功。也就是说,在命令提示符中输入cat filePath | clip.exe - Jet Blue
1
这段代码可以从shell复制到剪贴板,但是有没有相反的解决方案呢?我正在寻找pbpastexclip -o的等效方法。 - rev
1
@JetBlue 听起来你使用 echo 的方式不对 -- echo 只是将你提供的文本打印到输出中。而 cat 则是读取文件。 - anon
1
当我尝试使用从剪贴板读取选项进行io重定向时,会发生一些奇怪的事情。我可以正常运行它,并将剪贴板内容成功转储到命令行中,但是当我尝试执行例如 powershell.exe -command "Get-Clipboard" > test.txt 时,我的WSL窗口似乎失去了所有个性化设置(字体大小、字体类型),除了颜色方案。这是典型的吗? - R. Barrett

8
为了复制非ascii字符(其他语言),我需要执行以下操作:
echo 'αβψδεφγ' | iconv -f utf-8 -t utf-16le | clip.exe utf-16le 排除了前导BOM,因此您可以将其粘贴回去。

我无法在我的电脑上运行PowerShell脚本,所以我创建了一个bash脚本。我尝试从bash脚本中运行PowerShell,但未能获得我想要的结果,而这个解决方案是唯一有效的。 - purplecat
谢谢分享!我在我的WSL ~/.bashrc文件中创建了一个别名:alias clip='iconv -f utf-8 -t utf-16le | clip.exe'现在我可以像这样将输出传输到它:echo 'αβψδεφγ' | clip - piercebot
完美,正是我需要在Cygwin上运行它所需的。 - Hashim Aziz

1
如果您想要使用更加“易用”的东西,您可以将@reker的命令添加到您的~/.bashrc文件中(如果您使用zsh,则必须将其放在~/.zshrc文件中)。
我将这两行代码添加到了我的文件中:
alias paste="powershell.exe -command \"Get-Clipboard\""
function clip { "$1" | clip.exe;}

我使用剪贴板作为一个函数,这样我就可以像这样使用Linux命令('command' 'use this for command')。如果你更喜欢别名的方式,你可以添加类似于以下内容:
alias clip=clip.exe

如果你使用别名,就不必一直写.exe的后缀。

别忘了运行命令。

source ~/.zshrc

如果你没有保存文件,则更改只能在重新启动控制台后才会生效。


我一直在寻找严格复制命令输出的方法,因为我经常这样做。我从未使用过粘贴命令(我总是使用shift+insert)。但这是一个不错的建议,谢谢! - Marek Lewandowski
有一些错误。因此,当路径中存在空格(使用pwd)时,您无法复制粘贴它。它不能转义它们。 - Romanicus

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接