我正在编写一个程序代理,它将stdout等重定向到文件中,使用:proxy [-i infile] [-o outfile] [-e errfile] cmd [options]。
所以我想强制getopt在到达cmd时停止,因为它不应该解析选项。
我读到了环境变量POSIXLY_CORRECT,但我想让它独立于此。
所以我的问题是如何达到目的。
到目前为止我的代码的一部分
while ((opt = getopt (argc, argv, "i:o:e:")) != -1)
switch (opt)
{
case 'i':
i = 1;
strcpy(input, optarg);
break;
case 'o':
o = 1;
strcpy(output, optarg);
break;
case 'e':
e = 1;
strcpy(error, optarg);
break;
default:
fprintf(stderr, "usage: proxy [-i infile] [-o outfile] [-e errfile] <cmd> [options]\n");
return -1;
}
当给出cmd选项时,这将一直进入默认情况:(
答案 0 :(得分:1)
你被GNU getopt在进入之前重新排序参数的可疑行为所困扰。如您所知,一种解决方案是在第一次调用POSIXLY_CORRECT
之前设置环境变量getopt
。您还可以通过将+
作为getopt
字符串的第一个字符传递来禁用此行为:
opt = getopt(argc, argv, "+i:o:e:")