Существуют ли стандарты для параметров и аргументов командной строки Linux?
Это больше касается вызова программы, чем любого языка или анализатора (хотя я уверен, что выбор библиотеки анализатора может зависеть от этого). Видите, я использовал много утилит командной строки Linux. И есть некоторые очевидные закономерности; "-" предшествует одной букве для коротких опций, можно комбинировать несколько опций, которые не принимают аргументов, "-" предшествует длинным версиям опций и так далее.
Однако в некоторых случаях заглавная буква используется для инвертирования опции. Таким образом, "-d" может означать запуск в качестве демона, но "-D" означает не запускаться в качестве демона. (Почему бы просто не опустить опцию, если она вам не нужна? Это никогда не было ясно, но на самом деле она довольно распространена, поэтому я полагаю, что должна быть какая-то причина.) Но в некоторых программах заглавная буква - это совершенно не связанный вариант; если '-d' запускается как демон, '-D' может включать режим отладки. Есть ли какой-то всеобъемлющий принцип за этим, и какой лучше выбрать? Или мы просто имеем дело с "что бы ни работало"?
Есть также некоторые команды, которые, в дополнение к (или вместо) опциям с аргументами, просто принимают одиночные аргументы. cp - хороший пример этого; кроме пары редко используемых переключателей предполагается, что последним полученным аргументом является пункт назначения, а любые аргументы между списком опций и пунктом назначения считаются источниками. Есть ли эмпирическое правило, когда "нормально" полагаться на такой порядок, вместо использования явных флагов опций с аргументами?
5 ответов
ESR собрал много информации об этом в своей книге "Искусство программирования в UNIX". Вот фрагмент.
-a
Все (без аргументов). Если есть опция --all в стиле GNU, для -a быть чем-то иным, кроме его синонима, было бы довольно удивительно. Примеры: fuser(1), fetchmail(1).Добавить, как в tar (1). Это часто сочетается с -d для удаления.
-b
Размер буфера или блока (с аргументом). Установите критический размер буфера или (в программе, связанной с архивированием или управлением носителями), установите размер блока. Примеры: du (1), df (1), tar (1).Batch. Если программа является естественно интерактивной, -b может использоваться для подавления подсказок или установки других параметров, подходящих для приема ввода из файла, а не оператора-человека. Пример: flex (1).
-с
Команда (с аргументом). Если программа является интерпретатором, который обычно принимает команды от стандартного ввода, ожидается, что параметр аргумента -c будет передан ей в виде одной строки ввода. Это соглашение особенно важно для оболочек и интерпретаторов, подобных оболочке. Примеры: sh(1), ash(1), bsh(1), ksh(1), python(1). Сравните -е ниже.Проверьте (без аргументов). Проверьте правильность аргумента (ов) файла для команды, но на самом деле не выполняйте обычную обработку. Часто используется в качестве опции проверки синтаксиса программами, выполняющими интерпретацию командных файлов. Примеры: getty(1), perl(1).
См. Полный список на http://catb.org/~esr/writings/taoup/html/ch10s05.html
Интерфейс командной строки 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.
Краткое резюме темы:
Ваш CLI должен отображать справку при отсутствии или неправильных параметрах в дополнение к сообщению об ошибке, если таковые имеются.
Вы должны использовать
-
для однобуквенного флага или опции и--
для длинного варианта, например-a
а также--all
Все программы должны поддерживать две стандартные опции:
-v
--version
а также-h
--help
,-h
а также--help
=> Дать сообщение об использовании и выйти-v
а также--version
=> Показать версию программы и выйти
См. Ссылки (IEEE и GNU getopt), приведенные в этом ответе /questions/21327605/suschestvuyut-li-standartyi-dlya-parametrov-i-argumentov-komandnoj-stroki-linux/21327621#21327621