Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

And how does it also autocomplete aliases?

share|improve this question

3 Answers 3

up vote 10 down vote accepted

Depending on the command:

  • Someone may have written a function to generate possible completions of arguments, including options. You'll find functions for some commands in /etc/bash_completion.d/* (or a different location on some systems). These functions are registered with the complete built-in (e.g. complete -F _find find tells bash to call the _find function when you press Tab on a find command). They use the compgen built-in to tell bash “here are the possible completions”.
  • For some commands, bash will call the command with the argument --help and parse the output. Such commands can be registered with the complete built-in, e.g. complete -F _longopt ls. _longopt is in fact a completion generation function, that happens to parse a command's output rather than use a fixed list. (There are other more specialized completion functions that parse a command's output to generate possible completions; look in /etc/bash_completion.d/* for examples.)
  • For things like aliases, the completion function looks them up in bash's internal tables. The complete built-in has options for that, e.g. -A for aliases.
share|improve this answer

Support for bash completion is provided in Debian and Ubuntu by the bash completion package. You also usually need to uncomment the following in /etc/bash.bashrc and/or .bashrc to source the bash completion files. The following is from /etc/bash.bashrc:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

for this to work. I usually uncomment it in both. The handling of interactive/login shells in Debian is a bit of a mess.

Similar comments presumably apply to other distributions, though maybe they enable the sourcing by default.

share|improve this answer

Have a look at the file

/etc/bash_completion

and observe the files from the directory:

/etc/bash_completion.d

You will find the answer.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.