是否有通用的方法将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工具链的最佳解决方案。
答案 0 :(得分:1)
您最初在标题"如何[我可以]将MSYS shell脚本转换为Windows .exe?"在我看来,这个问题通常比你现在提出的问题更有用(也更具体)。在此基础上,我将回答原始问题。
我知道你无法将编译 MSYS shell脚本(或者实际上任何 Bourne shell脚本)简化为Windows可执行文件,以便它可以作为另一个可执行文件的子项调用。但是,您可以做的是调用MSYS shell本身作为子进程来解释脚本;你需要的语法是:
sh.exe -c 'script [argument ...]'
所以,如果您可以配置emacs clojure进程以这种方式调用命令,那么可以实现您的目标。
但请注意:MSYS命令旨在从已经运行且正确初始化的MSYS父shell中运行。如果emacs作为这样一个shell的孩子运行,那么这应该可行。但是,如果emacs作为纯粹的本机Windows进程运行,在MSYS环境之外,那么当您调用子shell时,你必须处理初始化[*]。如果您看到错误消息,例如"资源不可用" ,"资源暂时不可用" ,或"不能为cygwin的堆预留空间" ,(是的,MSYS来自早期的cygwin版本,而且这条消息的文本从未改变过),这是一个相当确定的指标, shell环境未正确初始化。
[*]实际上,您需要重现由msys.bat命令脚本执行的初始化步骤,该脚本随任何MSYS安装一起提供。