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!


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/bash_completion.sh ]; then
  . /opt/local/etc/profile.d/bash_completion.sh

See trac.macports.org/wiki/howto/bash-completion for instructions on how to enable completion for port names.

  • 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
  • 1
    Thanks for the tip about autocompletion in homebrew. That alone earned this answer an up-vote. Jul 10 '11 at 23:02
  • Excellent, this enabled make autocomplete, just what I wanted. Nov 26 '13 at 17:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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