Skip to content
Takes a Python list or dictionary input and automatically generates simple, yet functioning, bashcompletion code.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


python-bashcomplete takes:

  • Lists of strings and dictionaries, or
  • Nested dictionaries

and compiles simple, yet functional bashcomplete code for any program that invokes bashcomplete.BashComplete() with a list or dictionary.


pip install python-bashcomplete

Example structures

Autocompletes one level:

test = ['level1a', 'level1b']

Autocompletes two possibilities, both of which have sublevels:

test = {
    'level1a': ['1', '2', '3'],
    'level1b': ['4', '5', '6']

Autocompletes three possibilities, only two of which have sublevels:

test = [
        'level1a': ['1', '2', '3']
        'level1b': ['4', '5', '6']

Autocompletes only one level. Final string values are ignored:

test = {

Autocomplete with autogenerated words:

test = {
    'files': ['`ls -1`'],
    'devices': ['`ls -1 /dev`']


Add the following lines to your command-line program:

import bashcomplete

where test is your data structure. This will generate <filename>.bash_complete in your current folder using the filename of the executing program.

If you wish to constrain the autocomplete words to only what has been defined, use:

bashcomplete.BashComplete(test, constrain=True)

If you wish to create a .bash_complete file with another name use:

bashcomplete.BashComplete(test, filename='', output_filename='myprogram_py_cloudversion')


Use the generated <filename>.bash_complete by adding:

. /path/to/<filename>.bash_complete

to your .profile. From this point on, any run of <filename> will use the generated bash completion.

Something went wrong with that request. Please try again.