{% assign commands = site.data.cli.shell.commands %}

{% for command in commands %}
<h3 id="bookkeeper-shell-{{ command.name }}">{{ command.name }}</h3>

{{ command.description | markdownify }}

<h5>Usage</h5>

```shell
$ bin/bookkeeper shell {{ command.name }}{% if command.argument %} \
  {{ command.argument }}{% endif %}{% if command.options %} \
  <options>{% endif %}
```

{% if command.options %}
<h5>Options</h5>

<table>
  <thead>
    <tr>
      <th>Flag</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    {% for option in command.options %}
    <tr>
      <td><code>{{ option.flag }}</code></td>
      <td>{{ option.description }}</td>
    </tr>
    {% endfor %}
  </tbody>
</table>
{% endif %} <!-- if command.options -->
{% unless forloop.last %}<hr>{% endunless %}
{% endfor %} <!-- for command in commands -->
