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). Жутко бесит. Очевидно же, что это должно быть прямое дополнение.
оффтоп
Date: 2016-08-22 12:02 (UTC)Re: оффтоп
Date: 2016-08-22 12:39 (UTC)no subject
Date: 2016-08-22 12:04 (UTC)А про lxc - плюс много.
no subject
Date: 2016-08-22 13:00 (UTC)Нечто, что однозначно восстанавливается из контекста или неважно для пользователя.
[Компьютер,] перезагрузись. [Шелл,] уходи (
exit). Убить --сигналом 9 [процесс] 3183. [Компилятор, линкер и всё, что понадобится,] соберите всё (make all).