Always wanted to learn using a shell more deeply? Maybe “fish“, the “friendly interactive shell” is the right kickoff for you.
If you are already a heavy command line user with customized .bashrc or even .zshrc (like me), thank you probably don’t need another shell. But if this shell thingy is somehow a miracle to you but you saw people using it like wizards with colorful commands and a typing speed that made you jealous then it could help you to start with a shell that concentrates on being very friendly to new users as common shells like Bash and ZSH expect you to read the manual and write a config file (there are aids and defaults that vary from distribution to distribution).
The standard shell for login users in Ubuntu/Debian is “Bash”. Ubuntu already ships the file /etc/bash_completion that is read by default and helps users using the TAB key more exensively. Try it on you bash shell: just type something like “ls –” and press TAB twice. You’ll see a list of options that “ls” provides. Nice but it could be nicer. Let’s compare this to fish. Install fish by using Synaptic or “aptitude install fish”, open a terminal and start the shell by typing “fish”. You should a changed green prompt. Now type “ls -” and press TAB.
Stop: Already while typing you should see a strange color change. When entering “l” the character turns red and underlined. Looks like an error? Well, it is: fish tells you, that “l” is probably not a command. An aid during typing before running a command. Neat. Now, when pressing TAB you should a very clean list of options for “ls” with a short description of each option:
Helpfull, isn’t it? Of course this is not limited to ls. Try it with other commands you are using. If you ask yourself why you have to type “command –” and press TAB: “–” introduces a command line option (“-” does this also – try it!). As you press TAB after this, the shells knows “the user wants to do something and needs help on completing it”. It looks after a pattern and sees that you want to use the given command and are looking for options. That’s all. As I said: This works in Bash often by default also, but not that nice.
Now fish can do more with completion of course. Want to install a program? Try “aptitude install mut” and press TAB. It will show you a list of packages matching that pattern:
Need to kill a process? Type “kill ” and press TAB and you will get a nice list of running processes:
The list of possible TAB completions on fish is endless. Just notice that emphasis has been put on commands like mount, make, su, ssh, apt-get/aptitude. In most commands usernames, process ids will automatically be completed. The trick is just to try TAB when you are too lazy to type or unsure how to proceed. A good shell surprises you from time to time with it’s completion.
Also very helpful is the extended pattern matching for file names. Let’s say you want a list of all pdf files in a directory and all it’s subdirectories. On bash you probably use something like “find . -name “*.mp3″. On fish you use the pattern “**” which means any files and directories in the current directory and all of its subdirectories. So type “ls **.pdf” and you get the list you want as fish crawls through the directories for you. Want alle .mp3 and mp4 files but not files like .mpeg? Use “ls **.mp?” as “?” stands for one character. Of course commands like “rm **.bak” are possible, too. Use them with care! In the following example we are looking for pdf files in all subdirectorie, delete them and afterwards make sure they are really gone:
So let me stop here. I hope, I was able to show you that using fish instead of an unconfigured shell is a nice way of getting in the command line business. Fish provides you with a lot of more features that you might need and saves you from writing a config file from scratch.
If you want to give fish a try: Install it and run the “help” command. I will launch a nice help page in you browser. Read some parts of the document as they’ll show you nice gimmicks. Or just don’t and start right away. But trust me: Reading hints for a shell from time to time will save you … time.
(Just in case you don’t know: You can change your standard shell by using the “chsh” command. But when being a novice it is always a good idea to stick to the distribution specific default shell and run your shell directly by calling it. When you are more used to it feel free to make it your standard shell…)