Думаю, я пытаюсь придумать, как устроить так, чтобы getopt_long
пропускал аргумент.
Я написал общую библиотеку / dll и использую ее из C или из lua-скрипта. Часть кода, которая анализирует CLI, находится в общей библиотеке/dll, которая находится на языке C (см. ниже). Я могу получить доступ к argc и argv из файла общей библиотеки/dll на языке C.
Когда я запускаю свою программу, это может быть одно из:
$ my_c_app --buddy moe --buddy larry --buddy curly
$ interpreter my_script.scr --buddy moe --buddy larry --buddy curly
Когда я разбираю из my_c_app
, все работает нормально. Но когда я передаю argc и argv из сценария lua, все идет наперекосяк.
Я думаю, что это спотыкается, потому что все начинается с lua my_script.lua
. Я думаю, что эту часть нужно пропустить (он же рассматривает два термина как имя стартовой программы)
Вот код разбора:
static struct option long_options[] = {
{"buddy", required_argument, NULL, 'b'},
{"version", optional_argument, NULL, 'v'},
{NULL, 0, NULL, 0}
};
void parse_cli(int argc, char *const *argv)
{
char ch;
// show me what you see
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
print("--------\n");
while ((ch = getopt_long(argc, argv, "p:v:", long_options, NULL)) != -1) {
switch (ch) {
case 'b':
printf("buddy %s\n", optarg);
break;
case 'v':
printf("version 1.0\n");
default:
break;
}
}
}
Вот что вы видите:
работает
$ my_c_app --buddy moe --buddy larry --buddy curly
my_c_app
--buddy
moe
--buddy
larry
--buddy
curly
--------
moe
larry
curly
не удается
interpreter
my_script.scr
--buddy
moe
--buddy
larry
--buddy
curly
--------
(null)
(null)
(null)
ПРИМЕЧАНИЯ:
- Я экспериментировал с установкой
optind
на разные значения, нет. - Мой интерпретатор действительно lua.
- Я не думаю, что это lua вещь. Это может быть
python my_script.py