CLI как язык
2016-08-22 18:01Синтаксис аргументов командной строки следует рассматривать и проектировать аналогично синтаксису человеческого языка. В частности, в нём бывают различные части речи и члены предложения.
Название бинарника может быть глаголом в повелительном наклонении (reboot
) или существительным в роли обращения (firefox
, git
). В последнем случае отсутствие аргументов соответствует запуску приложения с пользовательским интерфейсом; если аргументы есть, то первый — это опять глагол в повелительном наклонении (git fetch
).
Ключ без аргумента соответствует наречию, обычно в роли обстоятельства образа действия (--quietly
, --verbosely
; по истерическим перчинам устоялось написание без суффикса -ly).
Ключ с аргументом — это косвенное дополнение, где имя ключа играет роль предлога (install -t /usr/bin foo
— установить в /usr/bin foo); или уточняющее родовое слово в составе прямого дополнения (install -d /var/lib/foo
— установить каталог /var/lib/foo).
Позиционный аргумент — это прямое дополнение (git clone git://github.com/git/git.git
).
Это, конечно, не все паттерны — что-то я наверняка упустил.
Базовый язык для команднострочного интерфейса — разумеется, английский. (Если бы командную строку изобрёл японец, глагол ставился бы последним, а sudo
записывалось бы как 下さい [kudasai] после глагола.)
Собственно, я это всё к чему? У системы виртуализации/контейнеризации LXC есть команды lxc-start
, lxc-stop
и несколько других. И все они принимают название контейнера, над которым работать, именованным аргументом (lxc-start -n foo
). Жутко бесит. Очевидно же, что это должно быть прямое дополнение.