如何在Windows命令行运行MSys2执行bash命令并阻塞至完成?
解决MSys2脚本执行后进程提前返回的问题
核心原因
直接调用mingw32.exe执行脚本时,该启动器会fork一个后台shell进程后立即返回,导致构建流程不等待脚本完成就继续执行,进而引发头文件缺失或版本信息过时的问题。
有效解决方案
方法1:直接调用MSys2的bash.exe(推荐)
绕过mingw32.exe启动器,直接调用MSys2自带的bash解释器,确保进程阻塞直到脚本执行完毕,且全程非交互:
c:\msys64\usr\bin\bash.exe --norc -- "../EXTERNALS/Scripts/GitBuildVersion.sh" "../src" "../BUILDS"
--norc:禁用加载用户配置文件(如.bashrc),避免交互行为或不必要的环境变量干扰,适配CI自动化场景--:明确分隔命令参数,防止脚本路径或参数被误解析为bash选项
方法2:通过mingw32.exe强制阻塞执行
如果必须使用mingw32.exe,可以通过指定shell命令的方式强制其等待脚本完成:
c:\msys64\mingw32.exe bash -c "../EXTERNALS/Scripts/GitBuildVersion.sh ../src ../BUILDS"
这里mingw32.exe会启动bash并执行指定的脚本命令,直到脚本运行结束后才返回父进程。
额外注意事项
- 确保脚本
GitBuildVersion.sh的开头有正确的shebang(#!/bin/bash),避免shell解释器匹配错误 - 若脚本中涉及路径处理,MSys2的bash会自动将Windows风格路径(如
../src)转换为POSIX风格,无需手动修改 - 在CI环境中,需确保MSys2的安装路径(
c:\msys64)固定,或通过环境变量指定路径,避免路径变动导致调用失败
内容的提问来源于stack exchange,提问作者user526477
相关产品推荐
相关产品推荐

