Home

Awesome

bash completion for Apple tools

These are a number of scripts designed to add programmable completion to bash for some of the command line tools. They complete the options for each tool, for most the completion cuts in after - or --.

If you have installed bash completion using brew then drop the files into /usr/local/etc/bash_completion.d/ (or link them) and open a new Terminal window.

Feedback, bug reports and comments would be greatly appreciated. If you want to nominate a CLI tool for me to add to this set, drop me a note or open an issue.

For zsh

You can use bash completions with zsh just close to the top of .zshrc put :

# bash compatible completion
autoload bashcompinit
bashcompinit

and the line source <path to directory of completions>/* right at the end, e.g. source ~/bin/bash_completion/*.

Notes

bless

For bless it first completes on the action option and then completes on the options for that action.

diskutil

For diskutil it first completes on the verb and then the options for the verb. For options prefaced with - it will only complete after you enter the -. For verbs such as eraseDisk where you specify a format argument it will also complete the formats. No work has been done to create more specific completion than at the verb level or to make sure you have options and arguments in the right order. Quite a lot of the verbs take no options.

hdiutil

For hdiutil it first completes on the verbs and then completes on the options for each verb once you enter the -. No work has been done to create more specific completion than at the verb level or to make sure you have options and arguments in the right order.

quickpkg

It will complete all the options. If you enter the option --ownership it will then complete on the the three possibilities. If you enter the option --keychain then it will complete on all the keychains the system knows about.

networksetup

If you enter a - it will complete on the options (there are a heck of a lot). Most options require a service name, if you enter " then it will complete on the current service names.

If you want to complete on a hardware port then enter ' (that's a single quote) then it will complete on the hardware ports. I'm still figuring out how to handle the few options that want either a hardware port or device name.

The Airport and wireless options want a device name ('en0', 'bridge0' etc) so they will complete the device names. This is handier on Macs with a bunch of psuedo devices.

More expansions to this may come. Feedback appreciated.