Существуют ли стандарты для командной строки и аргументов командной строки Linux?

Это больше о вызове программы, чем любой язык или парсер (хотя я уверен, что выбор библиотеки парсера может зависеть от этого). Смотрите, я использовал много утилит командной строки Linux. И есть некоторые очевидные закономерности; "-" предшествует одной букве для коротких опций, можно комбинировать несколько параметров, которые не принимают аргументы, "-" предшествует длинным версиям опций и т.д.

Однако в некоторых случаях капитализация используется для инвертирования опциона. Таким образом, "-d" может означать запуск в качестве демона, но "-D" должен быть запущен как демон. (Почему бы просто не опустить вариант, если вы этого не хотите? Это никогда не было ясно, но на самом деле оно довольно распространенное, поэтому я считаю, что должна быть какая-то причина.) Но в некоторых программах капитал - это совершенно не связанный с ним вариант; если '-d' запускается как демон, '-D' может включать режим отладки. За этим стоит какой-то главный принцип, и что лучше выбрать? Или мы просто имеем дело с "чем работает"?

Есть также некоторые команды, которые помимо опций (или вместо) с аргументами просто принимают одиночные аргументы. cp - хороший пример этого; кроме пары редко используемых переключений, последний аргумент, который он получает, считается назначенным, и любые аргументы между списком опций и пунктом назначения считаются источниками. Есть ли правило, когда "нормально" полагаться на такой порядок, вместо использования явных флажков опций с аргументами?

Ответ 2

ESR собрал много информации об этом в своей книге "Искусство программирования UNIX". Вот фрагмент.

-a
Все (без аргументов). Если существует опция -all в стиле GNU, для -a может быть что угодно, кроме синонима для нее, было бы совершенно неожиданно. Примеры: фьюзер (1), fetchmail (1).

Добавить, как в tar (1). Это часто сопрягается с -d для удаления.

-b
Буфер или размер блока (с аргументом). Установите критический размер буфера или (в программе, связанной с архивированием или управлением хранилищем media) задает размер блока. Примеры: du (1), df (1), tar (1).

Batch. Если программа естественно интерактивна, -b может использоваться для подавлять подсказки или устанавливать другие параметры, соответствующие принятию ввода из файла, а не человека. Пример: flex (1).

-c
Команда (с аргументом). Если программа является интерпретатором, который обычно принимает команды со стандартного ввода, ожидается, что опция аргумента -c будет передана ему как одна строка вход. Эта конвенция особенно сильна для снарядов и оболочечные интерпретаторы. Примеры: sh (1), зола (1), bsh (1), ksh (1), Python (1). Сравните -e ниже.

Проверить (без аргумента). Проверьте правильность файла аргумент команды, но на самом деле не выполняются нормальные обработка. Часто используется как опция проверки синтаксиса программами, которые интерпретация командных файлов. Примеры: getty (1), perl (1).

См. полный список http://catb.org/~esr/writings/taoup/html/ch10s05.html

Ответ 3

Интерфейс командной строки Linux/GNU следует стандарту POSIX. Это обозначено GNU стандартами: http://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html.

Синтаксис командной строки также является частью спецификации Single Unix, хотя -long-options - это инновация GNU IIRC.

Смотрите здесь: http://pubs.opengroup.org/onlinepubs/7908799/xbd/utilconv.html

Но да, этот стандарт реализован как getopt.