# Bash command-line completion scripts

There are two completion scripts available: `ovs-appctl-bashcomp.bash` and `ovs-vsctl-bashcomp.bash`.

## ovs-appctl-bashcomp

`ovs-appctl-bashcomp.bash` adds bash command-line completion support for `ovs-appctl`, `ovs-dpctl`, `ovs-ofctl` and `ovsdb-tool` commands.

### Features

- Display available completion or complete on unfinished user input (long option, subcommand, and argument).

- Subcommand hints

- Convert between keywords like `bridge`, `port`, `interface`, or `dp` and the available record in ovsdb.

### Limitations

- Only supports a small set of important keywords (`dp`, `datapath`, `bridge`, `switch`, `port`, `interface`, `iface`).

- Does not support parsing of nested options. For example:

      $ ovsdb-tool create [db [schema]]

- Does not support expansion on repeated argument. For example:

      $ ovs-dpctl show [dp...]).

- Only supports matching on long options, and only in the format `--option [arg]`. Do not use `--option=[arg]`.

## ovs-vsctl-bashcomp

`ovs-vsctl-bashcomp.bash` adds Bash command-line completion support for `ovs-vsctl` command.

### Features

- Display available completion and complete on user input for global/local options, command, and argument.

- Query database and expand keywords like `table`, `record`, `column`, or `key`, to available completions.

- Deal with argument relations like ‘one and more’, ‘zero or one’.

- Complete multiple `ovs-vsctl` commands cascaded via `--`.

### Limitations

Completion of very long `ovs-vsctl` commands can take up to several seconds.

## Usage

The bashcomp scripts should be placed at `/etc/bash_completion.d/` to be available for all bash sessions. Running `make install` will place the scripts to `$(sysconfdir)/bash_completion.d/`, thus, the user should specify `--sysconfdir=/etc` at configuration. If OVS is installed from packages, the scripts will automatically be placed inside `/etc/bash_completion.d/`.

If you just want to run the scripts in one bash, you can remove them from `/etc/bash_completion.d/` and run the scripts via `. ovs-appctl-bashcomp.bash` or `. ovs-vsctl-bashcomp.bash`.

## Tests

Unit tests are added in `tests/completion.at` and integrated into autotest framework. To run the tests, just run `make check`.