如何在git-bash中捕获Windows程序的原生实际退出码?
Git Bash 基于 MSYS2 运行时,本身提供了专属特殊变量可直接获取 Windows 程序返回的原始 32 位退出码,无需做额外适配。
可用方案
方案1:使用Git Bash内置专属变量 LASTEXITCODE
这是最简便的原生支持方案,MSYS2 环境为兼容 Windows 程序运行,额外提供了全大写的LASTEXITCODE特殊变量,专门存储上一个执行的 Windows 原生程序的完整退出码,不会被 bash 强制截断到 0-255 范围。
使用示例:
# 执行你的测试套件程序 ./your_google_test_suite.exe # 直接读取原始退出码 echo "Windows程序原始退出码:$LASTEXITCODE"
你遇到的栈溢出场景下,该变量会直接返回-1073740791,不会被映射为127。
方案2:兼容旧版本的cmd中转方案
如果使用的Git Bash版本较老,不支持LASTEXITCODE变量,可以通过调用cmd中转获取原始退出码:
# 调用cmd执行程序并输出原始errorlevel,由bash捕获结果 raw_exit_code=$(cmd /c ".\your_google_test_suite.exe >nul 2>&1 & echo %errorlevel%") echo "Windows程序原始退出码:$raw_exit_code"
注意事项
LASTEXITCODE为大小写敏感变量,必须全大写拼写才能正确读取- 该变量仅针对Windows原生PE程序生效,若执行的是Git Bash自带的MSYS2生态命令(如
ls、grep等),变量值仍为截断后的0-255范围值 - bash内置的
$?变量仍遵循POSIX规范返回截断后的0-255值,不要和LASTEXITCODE混淆使用
内容的提问来源于stack exchange,提问作者rasjani
相关产品推荐
相关产品推荐

