Bash completion for commands in Mac OS X
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
!
Solution 1:
bash-completion adds completion for:
- Command names after
sudo
andwhich
- Macports and Homebrew package names (optional)
- Hostnames in
known_hosts
for commands likessh
- 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
or
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
fi
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
fi
See trac.macports.org/wiki/howto/bash-completion for instructions on how to enable completion for port names.