如何将 msys shell 脚本转换为 windows exe 文件
Posted
技术标签:
【中文标题】如何将 msys shell 脚本转换为 windows exe 文件【英文标题】:How to convert a msys shell script into a windows exe file 【发布时间】:2015-06-10 22:52:09 【问题描述】:有没有通用的方法将 MSYS/MinGW 下的 shell 脚本转换成 windows .exe
文件(在后台调用 shell 脚本)?
我面临的具体问题是我有一个来自 Leiningen(clojure 工具链)的 shell 脚本lein
。我将它安装到默认路径 /usr/local/bin
(注意:我使用了 MSYS 的 shell 脚本版本,并且不想在 MinGW/MSys 树之外安装 lein
命令)。
现在emacs cider 无法获取lein
脚本,尽管lein
在Windows 路径上并且exec-path
。如果我将lein
复制成假的lein.exe
cd /usr/local/bin && cp lein lein.exe
然后,cider
识别 lein.exe
。但当然,cider
无法加载它,因为它不是有效的 exe
。
因此,我的问题。有没有一种通用的方法可以将lein
之类的 shell 脚本转换为 Windows 可执行文件,例如通过编写代理 c++ 程序?
谢谢。
-- 编辑 ---
(看到反对票后的想法)。
我知道这是一个极端情况,也许不是你每天都做的事情,但这是迄今为止我能确定的在 MinGW/MSYS 中制作一个可行的 clojure 工具链的最佳解决方案。
【问题讨论】:
像其他问“有没有办法做 X”的问题一样,这个问题太宽泛了。 正如您最初提出的那样,我认为这个问题一点也不宽泛;事实上,恰恰相反,我可能已经为这个问题提供了答案。现在你已经完全改变了它的范围,我根本没有兴趣解决。 @KeithMarshall,如果您可以发布或概述一个潜在的答案,我会回滚这个问题。我真的不认为我的问题很宽泛,也不在乎其他人认为它太宽泛了。我缩小范围只是因为我有兴趣寻求解决方案。在我的书中,更通用的 MinGW/MSYS 解决方案当然更好。 @KeithMarshall 你能帮我把我的问题编辑成你看到的原始表格吗?我找不到回滚自己的编辑的方法。 除了suggest 编辑之外,我没有足够的权限做任何事情,所以不,我真的不能帮你。如果您单击问题下方的edited x hours ago 链接,您应该会看到完整的编辑历史;你原来的问题是here 【参考方案1】:您最初在“我如何将 MSYS shell 脚本转换为 Windows .exe?”标题下提出了这个问题。在我看来,这通常比您现在要问的问题更有用(而且非常具体)。在此基础上,我将对原问题进行解答。
我不知道有什么方法可以简单地将 MSYS shell 脚本(或者实际上是 any Bourne shell 脚本)编译到 Windows 可执行文件中,这样它可以作为另一个可执行文件的子项调用。但是,您可以做的是调用 MSYS shell 本身作为子进程来解释脚本;您需要的语法是:
sh.exe -c 'script [argument ...]'
所以,如果您可以将您的 emacs clojure 进程配置为以这种方式调用命令,您可能实现您的目标。
但请注意:MSYS 命令旨在从已运行且已正确初始化的 MSYS 父 shell 中运行。如果 emacs 作为这样一个 shell 的子进程运行,那么这应该可以正常工作。但是,如果 emacs 在 MSYS 环境之外作为纯本机 Windows 进程运行,那么当您调用子 shell 时,您必须注意初始化[*]。如果您看到 “资源不可用”、“资源暂时不可用” 或 “无法为 cygwin 的堆预留空间” 等错误消息,(是的,MSYS 源自早期的 cygwin 版本,并且此消息的文本从未更改过),这是一个相当确定的指示,表明 shell 环境未正确初始化。
[*] 实际上,您需要重现由 msys.bat 命令脚本执行的初始化步骤,该脚本伴随任何 MSYS 安装。
【讨论】:
以上是关于如何将 msys shell 脚本转换为 windows exe 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 shell 脚本将 xlsx 文件转换为 csv 文件?
在 MSYS 下使用 Command 在 Windows 上调用 shell 脚本
如何使用 unix shell 脚本将 impala 查询输出日志转换为变量?