Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

How do I get fink and macports to autocomplete program names when typing commands, as in Ubuntu's apt-get?

For example when I type

sudo port install ca

and press tab, I want the terminal to autocomplete or show me the available commands.

OS X does not even auto-complete commands after sudo!

share|improve this question
up vote 56 down vote accepted

bash-completion adds completion for:

  • Command names after sudo and which
  • Macports and Homebrew package names (optional)
  • Hostnames in known_hosts for commands like ssh
  • Folders on CDPATH

And so on. You can print a list of completion commands with complete -p and see the source of a function with declare -f.

Installing Homebrew or MacPorts and Bash

First, you have to install Homebrew or MacPorts according to the instructions. Note: Do not install both, as they conflict.

Then, install a newer version of Bash. The built-in Bash in OS X is a little old, and you'll get more completion options with Bash > 4.1, which you can get through

brew install bash


sudo port install bash

depending on whether you use Homebrew or MacPorts.

Installing bash-completion with Homebrew

To install bash-completion, you have to:

brew install bash-completion

And add the following to your ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion

Homebrew currently installs an older version of bash-completion (1.3) that still works with Bash 3.x, but still, using Bash 4.x is recommended.

Installing bash-completion with MacPorts

With MacPorts:

sudo port install bash-completion

Then, add to your ~/.bash_profile:

if [ -f /opt/local/etc/profile.d/ ]; then
  . /opt/local/etc/profile.d/

See for instructions on how to enable completion for port names.

share|improve this answer
MacPorts' bash-completion package provides support for completion of package names as additional arguments after port <verb>. See here, lines 48-58. This behavior is hinted at in the MacPorts wiki, which states: "This is not just for files and directories, but also e.g. for the commands of port. So you type port <Tab> and get a list of all possible commands.", although it only explicitly mentions completion of the verbs (which is much simpler). – Daniel Beck May 25 '11 at 17:40
The package names are autocompleted, the wiki just doesn't mention that. See the linked script code. – Daniel Beck May 25 '11 at 18:24
The variants.conf is not for completion for MacPorts itself; variants.conf defines variants to automatically set for all ports, as is explained on the wiki page you linked. Adding that line causes bash completion support to be enabled when possible for ports you install. – Kevin Reid May 25 '11 at 23:26
Thanks for the tip about autocompletion in homebrew. That alone earned this answer an up-vote. – Paul Wagland Jul 10 '11 at 23:02
Excellent, this enabled make autocomplete, just what I wanted. – mtpain Nov 26 '13 at 17:46

Your Answer


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.