Terminal Auto Complete
Overview
Command line, or Bash completion is a Bash user’s best friend. If you had to type out everything you do on the command line, you would be doing a lot of typing. Similar to auto completion in most text fields these days, Bash completion allows you to start typing something and then have Bash complete it for you.
Basic Usage
You activate completion with the TAB key.
So lets say you wanted to change into a directory named books, and there were 3 directories available, namely books, movies and music. If you were to type
$ cd b
and then press the TAB key, it would end up as
$ cd books
Though, if there was another directory next to books that also starts with bo, for examples boxes, then Bash would only complete up till what they have in common, which is bo. You can then press the TAB key again to have it show you the available options, as so:
$ cd bo books/ boxes/
From here you can just type one more character to distinguish them and then press TAB again to have it complete the whole word. So you would type o and press TAB, and your command will be completed.
You get used to this very quickly, and it becomes a very powerful tool.
Smart Completion
The basic completion of files and directories are the default. You get smart completion which is command specific. These are done based on what you have typed so far and computed with procedures. For example, if you type:
$ unzip
and then press the TAB key, it could complete only ZIP files, instead of suggesting all available file.
It doesn’t stop there, though. Non-file completions are also possible. For example the apt-get command has various sub commands like install, remove, source and upgrade. All it’s sub commands are also completed. For example, typing
$ apt
and pressing the TAB key twice, gives you
$ apt-get autoclean autoremove build-dep check clean dist-upgrade dselect-upgrade install purge remove source update upgrade
You can now start typing one of them and press TAB to have it complete. For example, typing i and pressing TAB will complete into install.
Customizing
It gets even better. All this is very easily customized. If I wanted to have the perl command be completed only with files ending in the .pl extension, I can achieve this by creating a file at /etc/bash_completion.d/perl and giving it the following contents:
complete -f -X '!*.pl' perl
That’s it. Whenever I complete the arguments of the perl command, it will only do so for files ending in .pl.
Other Shortcuts
There are some other shortcuts also related to command line editing and history.
You can select your previous command by pressing the Up key. Repeatedly pressing this will allow you to browse through your history of commands. Pressing the Down will make you go forward into your history.
Or, if you start typing a command and realize your missed something and want to clear the whole line to start over, you can press Alt+R. This is like pressing and holding backspace until the line is cleared. An alternative is to just press Ctrl+C and return to the command line.
Sometimes you want to perform a series of commands on the same file. For example, to change the ownership and permissions of the same file you could type:
chown root:root myfile chmod 0644 myfile
This requires typing the filename twice. Bash will do this for you on the second line if you press Alt+. (Alt and the full stop character). For example, typing:
chown root:root myfile chmod 0644
and then pressing Alt+., will complete your command by taking the last argument of the previous command (ie. myfile) and inserting it at your current position, resulting in:
chmod 0644 myfile
Conclusion
So Why Love Linux? Because the command line, one of Linux’s true powers, offers powerful editing capabilities.