<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2011-12-22:1181104</id>
  <title>Блокнотик Centaur’а</title>
  <subtitle>Yuri Khan</subtitle>
  <author>
    <name>Yuri Khan</name>
  </author>
  <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom"/>
  <updated>2016-08-22T11:01:24Z</updated>
  <dw:journal username="yurikhan" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2011-12-22:1181104:66551</id>
    <link rel="alternate" type="text/html" href="https://yurikhan.dreamwidth.org/66551.html"/>
    <link rel="self" type="text/xml" href="https://yurikhan.dreamwidth.org/data/atom/?itemid=66551"/>
    <title>CLI как язык</title>
    <published>2016-08-22T11:01:24Z</published>
    <updated>2016-08-22T11:01:24Z</updated>
    <category term="syntax"/>
    <category term="cli"/>
    <category term="lxc"/>
    <category term="usability"/>
    <category term="soft"/>
    <dw:security>public</dw:security>
    <dw:reply-count>4</dw:reply-count>
    <content type="html">&lt;p&gt;Синтаксис аргументов командной строки следует рассматривать и проектировать аналогично синтаксису человеческого языка. В частности, в нём бывают различные части речи и члены предложения.&lt;/p&gt;

&lt;p&gt;Название бинарника может быть глаголом в повелительном наклонении (&lt;code&gt;reboot&lt;/code&gt;) или существительным в роли обращения (&lt;code&gt;firefox&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;). В последнем случае отсутствие аргументов соответствует запуску приложения с пользовательским интерфейсом; если аргументы есть, то первый — это опять глагол в повелительном наклонении (&lt;code&gt;git fetch&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Ключ без аргумента соответствует наречию, обычно в роли обстоятельства образа действия (&lt;code&gt;--quietly&lt;/code&gt;, &lt;code&gt;--verbosely&lt;/code&gt;; по истерическим перчинам устоялось написание без суффикса -ly).&lt;/p&gt;

&lt;p&gt;Ключ с аргументом — это косвенное дополнение, где имя ключа играет роль предлога (&lt;code&gt;install &lt;b&gt;-t /usr/bin&lt;/b&gt; foo&lt;/code&gt; — &lt;i&gt;установить &lt;b&gt;в /usr/bin&lt;/b&gt; foo&lt;/i&gt;); или уточняющее родовое слово в составе прямого дополнения (&lt;code&gt;install &lt;b&gt;-d /var/lib/foo&lt;/b&gt;&lt;/code&gt; — &lt;i&gt;установить &lt;b&gt;каталог /var/lib/foo&lt;/b&gt;&lt;/i&gt;).&lt;/p&gt;

&lt;p&gt;Позиционный аргумент — это прямое дополнение (&lt;code&gt;git clone git://github.com/git/git.git&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Это, конечно, не все паттерны — что-то я наверняка упустил.&lt;/p&gt;

&lt;p&gt;Базовый язык для команднострочного интерфейса — разумеется, английский. (Если бы командную строку изобрёл японец, глагол ставился бы последним, а &lt;code&gt;sudo&lt;/code&gt; записывалось бы как 下さい [kudasai] после глагола.)&lt;/p&gt;

&lt;p&gt;Собственно, я это всё к чему? У системы виртуализации/контейнеризации LXC есть команды &lt;code&gt;lxc-start&lt;/code&gt;, &lt;code&gt;lxc-stop&lt;/code&gt; и несколько других. И все они принимают название контейнера, над которым работать, именованным аргументом (&lt;code&gt;lxc-start -n foo&lt;/code&gt;). Жутко бесит. Очевидно же, что это должно быть прямое дополнение.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=yurikhan&amp;ditemid=66551" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
