MSYS2:如何禁用路径名到驱动器号的自动翻译?
MSYS2: How to disable automatic translation of pathname to drive letter?
我在 MSYS2 shell 中测试用 mingw 编译的 C 程序时遇到问题:我编写了一个命令行解析器,它根据 windows 约定接受选项(以 /
).如果我这样调用我的程序来生成输出文件:
./example.exe /o test
最终在 argv[1]
中的实际上是 O:/
。从控制台 window 运行 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
测试有点麻烦
您可以使用 MSYS2_ARG_CONV_EXCL
环境变量来禁用此行为。例如,尝试 运行:
MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test
我在 MSYS2 shell 中测试用 mingw 编译的 C 程序时遇到问题:我编写了一个命令行解析器,它根据 windows 约定接受选项(以 /
).如果我这样调用我的程序来生成输出文件:
./example.exe /o test
最终在 argv[1]
中的实际上是 O:/
。从控制台 window 运行 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
测试有点麻烦
您可以使用 MSYS2_ARG_CONV_EXCL
环境变量来禁用此行为。例如,尝试 运行:
MSYS2_ARG_CONV_EXCL=\* ./example.exe /o test