Обработка параметров командной строки до и после аргумента в C - PullRequest
4 голосов
/ 15 августа 2011

До сих пор я использовал getopt_long для разбора опций для программы командной строки C.

Есть ли способ остановить getopt_long разбор, когда он встречает аргумент, не являющийся опцией? Если нет, то как лучше всего справиться с этим в C?

Чтобы привести пример, я хотел бы обрабатывать команды аналогично git и иметь общие аргументы перед командой и специфичные для команды аргументы после нее:

git [general options] <command> [command options]

например:.

git --bare commit -a
git -p --bare status -s

-p и --bare являются общими параметрами и могут использоваться со всеми командами, тогда как -a относится к команде commit и -s относится к команде status.

Использование getopt_long попытается сначала проанализировать все параметры, а затем оставить необработанные аргументы для обработки. В идеале я бы хотел прекратить синтаксический анализ, как только я нажал не опцию (то есть команду), а затем передать оставшиеся аргументы анализатору опций, специфичному для команды.

1 Ответ

6 голосов
/ 15 августа 2011

Руководство GNU Getopt гласит:

POSIX требует следующего поведения: первая неопция останавливает обработку опций. Этот режим выбирается путем установки переменной среды POSIXLY_CORRECT или начала строки аргумента параметров со знака плюс (‘+’).

...