如何将 msys shell 脚本转换为 Windows exe 文件



有没有一种通用方法可以将 msys/MinGW 下的 shell 脚本转换为 windows .exe 文件(在幕后调用 shell 脚本)?

面临的具体问题是我有一个来自Leiningen(clojure工具链)的shell脚本lein。我将其安装到/usr/local/bin的默认路径(注意:我使用了 MSYS 的 shell 脚本版本,并且不想在 MinGW/MSys 树之外安装lein命令)。

现在 emacs 苹果酒无法获取lein脚本,尽管lein在窗口路径上并exec-path。如果我lein复制到假lein.exe

cd /usr/local/bin && cp lein lein.exe

然后,cider认出了lein.exe.但是,当然,cider无法加载它,因为它不是有效的exe

因此,我的问题。有没有一种通用的方法可以将像 lein 这样的 shell 脚本转换为 Windows 可执行文件,例如通过编写代理 c++ 程序?

谢谢。

--编辑---

(看到反对票后的想法)。

我知道这是一个极端情况,可能不是你每天都要做的事情,但这是我迄今为止能确定的在 MinGW/MSY 中制作可行的 clojure 工具链的最佳解决方案。

您最初在"如何[我可以]将MSYS shell脚本转换为Windows .exe"标题下问过这个问题。 在我看来,这是一个通常比你现在问的问题更有用(而且非常具体)的问题。在此基础上,我将对原始问题给出答案。

我知道没有办法简单地将MSYS shell脚本(或任何Bourne shell脚本)编译成Windows可执行文件,以便它可以作为另一个可执行文件的子级调用。但是,您可以做的是调用 MSYS 外壳本身作为子进程来解释脚本;您需要的语法是:

sh.exe -c 'script [argument ...]'

因此,如果你能配置你的Emacs Clojure进程以这种方式调用命令,你就可以实现你的目标。

但是,需要注意的是:MSYS 命令旨在从已经运行且正确初始化的 MSYS 父 shell 中运行。如果 emacs 作为这样一个 shell 的子级运行,那么这应该可以正常工作。但是,如果 emacs 在 MSYS 环境之外作为纯原生 Windows 进程运行,那么在调用子 shell 时,您必须注意初始化[*]。如果您看到诸如"资源不可用"、"资源暂时不可用"或"无法为 cygwin 的堆保留空间"之类的错误消息(是的,MSYS 源自早期的 cygwin 版本,并且此消息的文本从未更改),这是一个相当确定的指标,表明 shell 环境未正确初始化。

[*] 实际上,您需要重现由 msys.bat 命令脚本执行的初始化步骤,该脚本随任何 MSYS 安装一起执行。

最新更新