Article summary
One of the most useful features I learned when I first started working with Linux was the “tab completion” feature of Bash. This feature automatically completes unambiguous commands and paths when a user presses the <TAB>
key. I’ll provide some examples to illustrate the utility of this feature.
Using Tab Completion
Completing Paths
I can open Terminal.app, and at the prompt ($
), I can type:
$ open ~/Des<TAB>
This will automatically be completed to:
$ open ~/Desktop/
At this point, I can also use tab completion to get a list of ambiguous completion options, given what I’ve already entered. Here I have to press <TAB>
twice.
$ open ~/Desktop/<TAB><TAB>
Will show me:
$ open ~/Desktop/
.DS_Store .localized hacker.jpg rug/ wallpapers/
$ open ~/Desktop/
(I keep my desktop clean by periodically sweeping everything under the rug/
directory.)
Completing Commands
This completion feature can also be used to complete commands.
For example, if I type:
$ op<TAB><TAB>
I’ll see:
$ op
opam opam-switch-eval opensnoop
opam-admin open openssl
opam-installer opendiff opl2ofm
$ op
Or if I type:
$ ope<TAB>
I’ll see:
$ open
Learning Shell Commands with Tab Completion
This is useful for learning one’s way around a shell because it includes all the commands in the $PATH
. When I first learned to use Bash and Linux, I used to tab-complete all the available commands starting with different letters of the alphabet. Then I’d pick those that sounded interesting, use which
to find out where they were located, and use man
to read about them.
For example, I might ask myself, what is opensnoop
?
$ which opensnoop
/usr/bin/opensnoop
Well, it’s located in /usr/bin
, so it probably shipped with OS X–it isn’t something I installed with Homebrew since those commands end up in /usr/local/bin
. I wonder what it does?
$ man opensnoop
This brings up the manual page, which tells me, among other things, that opensnoop
is a command to “snoop file opens as they occur.” I also learn that it “Uses DTrace.” (If reading these manual pages or “manpages” is new to you, you can use the arrow keys to scroll up and down and press ‘q’ to quit when you’re done.)
Sometimes when I tried to open the manual page for a command, I was brought to a manual page for Bash’s own shell built-ins. This manpage was somewhat informative, but it didn’t really tell me much about how to use the command. I later learned that Bash has a help
command that gives a brief overview of each built-in command. There’s also much more information available in Bash’s info
documentation.
You may find command line interfaces opaque at first, but there is often helpful documentation available (without resorting to Google) if you know how to access it. Tab completion was an important first step for me when learning how to access traditional UNIX documentation.
Come back tomorrow, when I’ll explain programmable completion in Bash.