如何使用cygwin命令行和clip.exe将get命令的输出输出到剪贴板?

时间:2018-08-02 15:05:38

标签: windows cygwin autohotkey clipboard

我正在尝试使用AutoHotKey将hunspell hyphenation utility (for en_US)的输出输出到剪贴板中。

由于无论如何我都安装了Cygwin(如果需要的话,是64位版本),因此我首先克隆了hunspell连字git存储库(用于en_US),并将其编译并安装在Cygwin中。在Cygwin内部,它按预期运行:

peter@odo /home/git/hyphen
$ echo example | ./example hyph_en_US.dic /dev/stdin
ex=am=ple

下一步,我研究出了一些命令行变种,这些变种不能直接在Cygwin内部使用,而可以在Windows命令解释器中使用,以获得相同的结果。除其他外,以下工作有效:

C:\cygwin64\home\git\hyphen>%comspec% /c (c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin")
ex=am=ple

C:\cygwin64\home\git\hyphen>%comspec% /c c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin"
ex=am=ple

C:\cygwin64\home\git\hyphen>c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin"
ex=am=ple

C:\cygwin64\home\git\hyphen>c:\cygwin64\bin\bash.exe -c -- "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin"
ex=am=ple

在Windows命令解释器中,很容易将输出保存到剪贴板中(clip.exe在最近的Windows版本中是Windows的一部分),例如:

C:\cygwin64\home\git\hyphen>c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin" | clip

现在,我想我只需要将其传输到AutoHotKey脚本并将其连接到快捷方式(在我的情况下为F12)即可; AutoHotKey脚本的相关部分看起来像

F12::
RunWait, %ComSpec% /c c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin" | clip

不幸的是,这没有用。当我按F12键时,Windows打开了很短的时间,但显然没有任何内容被复制到剪贴板。我首先想到我需要更多的报价,或者我应该放弃%compec%,所以我尝试了很多其他变体,例如

F12::
RunWait, c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin" | clip

F12::
RunWait, %ComSpec% /c "c:\cygwin64\bin\bash.exe -c ""echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin""" | clip

F12::
RunWait, %ComSpec% /c c:\cygwin64\bin\bash.exe -c "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin" | clip

以此类推,但没有成功。

我什至不确定在哪个阶段失败;可能是引号,也可能是在AutoHotKey中调用clip.exe时无法正常工作。

我什至看到一个例子,他们在使用mintty.exe并声称没有它,就不会有标准的输入/输出,因此我们将需要它。相应的AHK脚本条目是这样的:

F12::
RunWait, c:\cygwin64\bin\mintty.exe -e /usr/bin/bash.exe -lic "echo example | /home/git/hyphen/example hyph_en_US.dic /dev/stdin" | clip

不用说这也不起作用。即没有更改剪贴板的内容。

当然,我知道我必须用其他方法代替echo example才能使该脚本有用(实际上,我想将当前剪贴板的内容提供给该脚本)。但是无论如何,第一步是使当前脚本(带有硬编码输入"example")正常工作。

有人可以告诉我如何更改AutoHotKey脚本以使其起作用吗?

顺便说一句,clip.exe通常似乎可以在AutoHotKey中运行。作为一个非常简单的例子,

F12::
RunWait %ComSpec% /c "ipconfig" | clip

按预期工作。

我认为我已经阅读了许多类似的主题和问题,但是它们都没有涉及Cygwin和剪贴板,尽管我尝试从这些其他来源中学习尽可能多的知识,但我自己却找不到解决方案

[与该问题并不十分相关,但以防万一有人想知道为什么我要让bash.exe参与进来]

程序example可以在Windows命令解释器中运行,但是它需要文件(包含单词列表)作为最后一个参数。在几个小时的研究中,我还没有发现如何在Windows命令解释器中将stdin用作文件。我可以通过将输入重定向到一个临时文件中,然后将该文件用作输入来解决该问题,但这非常丑陋。

通过让Cygwin的bash.exe进行工作,可以轻松避免此问题(希望Cygwin依次使用临时文件不实现/dev/stdin)。

0 个答案:

没有答案