我有一个名为
clear.bat
的小实用程序脚本,它对我的源代码进行一些整理工作。
这是一个
.bat
文件,因此我可以轻松地在 Windows 资源管理器中双击它。
有时,我发现从 Git bash(msysgit,如果这很重要的话)执行它会更方便。
为此,我输入
cmd
clear.bat
exit
cmd
将我的 Git bash 变成一个普通的 cmd
窗口,我可以在其中轻松执行批处理。当我输入 exit
时,cmd
环境就会终止,我又回到了 Git bash。
这可以通过更简单的方式实现吗?
我尝试了
cmd /C clean.bat
,因为文档说
Syntax
CMD [charset] [options]
CMD [charset] [options] [/c Command]
CMD [charset] [options] [/k Command]
Options
/C Run Command and then terminate
/K Run Command and then return to the CMD prompt.
This is useful for testing, to examine variables
编辑:
刚刚注意到该帖子已损坏。
我想要的是从 Git bash 中执行
clean.bat
,而不必键入上面的三个命令(cmd
、clear.bat
、exit
)。我只想从 Git bash 中执行 .bat
文件。明显的方法是创建一个单独的 .sh
文件来完成相同的工作,但这会导致双重代码。
编辑2: 当我执行
cmd /C clean.bat
时,Git bash 变成一个普通的 CMD 环境,只显示提示符。文件 clean.bat
不会被执行。就像我只输入 cmd
一样。
此外,添加
/debug
开关实际上没有任何作用。似乎只有 cmd
被评估,所有其他参数都被忽略。
经过一番尝试后,我自己找到了解决方案:
cmd "/C clean.bat"
就可以了。但我不知道为什么...
./clear.bat
就可以了。
Git for Windows(msysGit 已被 Git for Windows1 取代)FAQ 表示您有 3 个选项:
在某些时候,Windows 版 Git 添加了对
MSYS_NO_PATHCONV
环境变量的支持,因此除了 @eckes 和 @AlikElzin-kilaka 解决方案之外,您还可以
MSYS_NO_PATHCONV=1 cmd /c clean.bat
总的来说,我更喜欢这个解决方案,因为它可以让代码最接近普通的bash,并且有很多方法可以导出
MSYS_NO_PATHCONV
,具体取决于您的首选情况。
注意:Git for Window 的 bash 不支持 MSYS2 环境变量
MSYS2_ARG_CONV_EXCL
为什么
cmd "/c clean.bat"
不会产生其他错误?
事实证明,Windows 中的参数解析并不遵循与 *nix 中相同的通用规则。相反,在 Windows 中,根据您编译的运行时,参数的解析方式有所不同。基本上在 Windows 中,命令行参数作为“一个字符串”传入,然后由运行时解析。
例如
cmd
解析参数的方式与 wscript.exe
不同
最后,您有望找到适合此方法的方法,并且它是三种解决方案中最“窗口式”的解决方案
这在here解释得很好,并且使用起来很简单,但是添加了一个额外的
/
,这对可读性没有帮助
我喜欢
start clean
,它用cmd打开一个新窗口。这种方法有一些好处:
这会起作用并且它也释放了终端
nohup ./nucleus.bat &
less nohup.out
此方法(使用
//c
而不是 /c
)不需要引号。
cmd //c clean.bat