Bash completion for commands in Mac OS X
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.
Related videos on Youtube
Osama Gamal
Updated on September 18, 2022Comments
-
Osama Gamal over 1 year
How do I get
fink
andmacports
to autocomplete program names when typing commands, as in Ubuntu'sapt-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
! -
HikeMike almost 13 yearsMacPorts'
bash-completion
package provides support for completion of package names as additional arguments afterport <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 ofport
. So you typeport <Tab>
and get a list of all possible commands.", although it only explicitly mentions completion of the verbs (which is much simpler). -
HikeMike almost 13 yearsThe package names are autocompleted, the wiki just doesn't mention that. See the linked script code.
-
user3540003 almost 13 yearsThe
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. -
MrT almost 13 yearsThanks for the tip about autocompletion in homebrew. That alone earned this answer an up-vote.
-
Matthew Turner over 10 yearsExcellent, this enabled
make
autocomplete, just what I wanted. -
Marlon over 8 yearsif you happen to have both Brew and MacPorts make sure to add the macports one before Brew as it checks for $BASH_COMPLETION_COMPAT_DIR and exits if populated.
-
WestCoastProjects almost 5 yearsexcellent instructions here!
-
SRG over 2 yearsThanks for the answer, @slhck! I still wanted auto-complete for Git and I found a good solution here macinstruct.com/tutorials/…