Fish's real advantages isn't so much it's list of features, but the fact that they come pre-configured. That, and the fact that Fish sacrafices backwards compatiblity with other shells to make a cleaner command language and a more manageable environment. I like being able to configure an environment variable without tinkering with my .bashrc or .profile. Granted, I can't easily reasonably install it on the solaris machines at work, but it doesn't make my home computing environment much nicer.
The programmability of a shell just isn't interesting to me. Whenever I start hacking a shell script, it either starts out as just two or three lines or it evolves to the point where I feel like I need a "real" language. At that point, I'll end up hacking it in perl or python.
I would like to see the interactive Read Eval Print Loops of one of these languages finish closing the gap and become good shell replacements. I find I can get close to that sometimes with interactive programming environments, but not quite.
I've been thinking about this also and was planning this week to change one of my login shells to just pythn to trial it. I've now got two small line-based editors running in python (one is an ed clone, the other is simpler and uses list comprehension), and it's simple enough to write wrapper functions around the bits you need to change directory and spawn process. There's no standardisation of effort, but it's completely doable just on your own system. I realise it's probably not at the top of your mind, but can you think what you found missing when you last tried it?
I use fish on all my machines at this point. It's nice to have really smart auto-completion. I know bash can do some of this if you configure it correctly but I'm all about reasonable defaults. I can't be bothered with lots of configuration changes on every machine I touch.
One word of warning, and this probably applies to any shell, you should keep one of your sudoers on bash or sh. I've had a few occasions where something broke fish so when I logged into the machine via ssh I would see a few error messages and the session would terminate when the shell died locking me out of the system. I never figured out what broke fish in the first place but it's taught me the value of having a fallback user/shell for emergencies.
> I can't be bothered with lots of configuration changes on every machine I touch.
Every machine you touch may not have the option of fish. Having a reasonable .bashrc (and even .cshrc -- I've been on machines where bash was broken) is key to doing any sysadmin/dev work on linux/unix boxes.
Fish has a nice design document that gtive a better understanding of what it is about: http://fishshell.org/user_doc/design.html
Fish's real advantages isn't so much it's list of features, but the fact that they come pre-configured. That, and the fact that Fish sacrafices backwards compatiblity with other shells to make a cleaner command language and a more manageable environment. I like being able to configure an environment variable without tinkering with my .bashrc or .profile. Granted, I can't easily reasonably install it on the solaris machines at work, but it doesn't make my home computing environment much nicer.