MSYS2:如何禁用路径名到驱动器号的自动转换?
Posted
技术标签:
【中文标题】MSYS2:如何禁用路径名到驱动器号的自动转换?【英文标题】:MSYS2: How to disable automatic translation of pathname to drive letter? 【发布时间】:2017-06-22 13:14:18 【问题描述】:在 MSYS2 shell 中测试使用 mingw 编译的 C 程序时,我遇到了一个问题:我编写了一个命令行解析器,它根据 Windows 约定接受选项(以 /
开头)。如果我这样调用我的程序来生成输出文件:
./example.exe /o test
以argv[1]
结尾的实际上是O:/
。从运行CMD.EXE
的控制台窗口进行测试时,它工作正常。这个真正最小的程序演示了这种行为:
#include <stdio.h>
int main(int argc, char **argv)
if (argc > 1)
puts(argv[1]);
return 0;
$ ./example.exe /o
O:/
所以我猜这是 MSYS2 shell 试图提供帮助并将看起来像根目录下的一个字母路径的东西替换为驱动器字母语法。有没有办法禁用这种行为?总是启动CMD.EXE
进行测试有点麻烦。
【问题讨论】:
与 C 无关。您是否尝试转义或包含在 ticks/"
中?
@Olaf MSYS2 是 for C 的开发环境,经验法则是 one 语言标记几乎总是合适的!与clang
或Makefile
用于构建一些C 代码的命令行参数的问题相同...当然我尝试过明显 之类的东西!
@Olaf 和投票迁移也是错误的,请参阅What topics can I ask about here,尤其是“程序员常用的软件工具”
有问题的 shell 是 MSYS2 的一部分,从那里引用:“MSYS2 是 Windows 的软件发行版和构建平台”——绝对是“程序员常用的工具”。此外,请在此处停止破坏性编辑,例如参见 this discussion
【参考方案1】:
您可以使用MSYS2_ARG_CONV_EXCL
环境变量来禁用此行为。例如,尝试运行:
MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test
【讨论】:
很好,解决了这个问题,谢谢。你有解释这个环境变量内容的资源吗? 我暂时找不到,但它基本上是由一些分隔符分隔的参数前缀列表。 好的,我自己找找,同时记住名字:) ConEmu / Mingw64 有类似的功能吗? 重要的是您使用的是什么外壳(例如 bash.exe),而不是终端模拟器。如果它是使用 MSYS2 运行时 (msys-2.0.dll) 的可执行文件,则 MSYS2_ARG_CONV_EXCL 应该可以工作。以上是关于MSYS2:如何禁用路径名到驱动器号的自动转换?的主要内容,如果未能解决你的问题,请参考以下文章