MSYS Bash执行Windows可执行命令异常的原因及解决办法
MSYS Bash调用dumpbin.exe参数解析异常的解决办法
为啥会出这问题?
MSYS Bash自带路径自动转换特性——它会把类Unix风格的/开头字符串自动转成Windows的\路径,目的是让Unix工具适配Windows文件系统。但dumpbin的参数/dependents是命令选项,不是路径,MSYS却把它当成路径转成了\dependents,dumpbin认不出这个格式的参数,自然报错。
而Cygwin的路径转换逻辑不一样,它会区分命令参数和实际路径,不会乱转这种/xxx格式的选项,所以能正常运行。
怎么解决?
给你几个靠谱的方案:
1. 临时禁用路径转换再调用
执行命令前加MSYS_NO_PATHCONV=1,同时把参数用双引号包起来(避免其他意外转换):
MSYS_NO_PATHCONV=1 dumpbin "/dependents" some.exe
这个环境变量会临时关掉MSYS的路径转换,让/dependents原封不动传给dumpbin。
2. 自定义函数内置禁用逻辑
如果是常用的自定义函数,直接把环境变量设置写进函数里:
function dumpbin_deps() { MSYS_NO_PATHCONV=1 dumpbin "$@" }
之后调用dumpbin_deps /dependents some.exe,所有参数都会正常传递,不会被转码。
3. 转义斜杠(不推荐)
把/用反斜杠转义成\/,让MSYS别把它当路径:
dumpbin \/dependents some.exe
这种方法容易漏转,参数多的时候麻烦,不如前两种省心。
验证
用第一种方法执行后,dumpbin就能正确识别/dependents参数,正常输出目标文件的依赖信息。
内容的提问来源于stack exchange,提问作者not2qubit
相关产品推荐
相关产品推荐

