The first (and often lasting) impression an operating system leaves on us much depends on the shell it offers. For illustration, imagine you would be asked to configure the services on a stone-age Unix such as Solaris 2.2 using /bin/sh and nothing else. That's right, no bash. I tell you: this is a traumatic experience which can easily lead to frequent nightmares and a general restlessness.
Fortunately, all modern systems use the bash as their default shell. The bash is the least common denominator, and after one or two adjustments it's actually quite pleasant to use. Of course, it doesn't have the power of the almighty zsh, but then, who has?
There are a number of lesser known shells, and I like to try one from time to time. One to which I grew fond of is the fish shell, whose name seems at first just to be a pun, but actually translates to friendly interactive shell. And it is friendly, this fish. :)
It's not only the greeting, it's the tab completion and streamlined history as well as the unique open command: features which are second to none and intuitive at the same time. The ease of use, however, has attained fish the dubious fame of being a good shell for novices. It certainly is, but is an experienced user truly above of being informed by the shell about the nature and intention of the several thousand binaries scattered across his system? I don't think so. ;)
Fish not only improves on immediately obvious features, but also attempts to establish a clean and consistent syntax and thus differs in several regards from the bash. The author of the fish shell described all of these aspects in an illustrative article in the early stage of development.
In its default configuration, the fish shell provides several ameneties and conveniences either not available or well-hidden in other shells (such as, for example, the autocd feature ;) ). Out-of-the-box, the fish shell lacks only some aliases which I'm used too. Their setup is simple, though:
alias c='clear' funcsave c
and so on for p, ' cd -p', s, 'cd ..', x, 'exit', etc. :)
The fish functions are, by the way, stored at /home/username/.config/fish/functions.