For those wondering about the advantages of ZSH over, say, bash: ZSH was first to add programmable completions (and still comes with a huge library of these), many more configuration options, history merging and much more.
It also has a huge library of built-ins (even an FTP client).
People could call it bloated, but I see no difference in performance from Bash, so for me personally, that argument is moot.
What really made ZSH gain a spot in my heart though, is the user-friendly user's guide at
This is how I learned to use the Unix shell back in 2000. It's not just a brilliant introduction into ZSH itself, it also contains a lot of information about the Unix shell in general and all written in a way that a non-Unix user can easily understand it and very quickly learn all that's needed to be productive on the command line.
Using that guide and ZSH, I learned the Unix shell, so I never bothered to go back to Bash.
Besides, being able to do
scp fi<tab> servern<tab>:/so<tab>
to have it completed to
scp file servername.example.com:/somepath
is just brilliant.
Same goes for contents of tar.(g|b)z(ip|2) archives. Or git commands. Or svn commands.
For me the really compelling reason to use zsh is that it's "like bash, but without the gotchas." For example, $* just works, even if the args have spaces. You don't have to think about "$@" which still doesn't work sometimes.
Am I the only one who gets the impression people are saying "Take a shower, hippie" under their breath every time I mention to others that I'm using zsh?
Yeah. I kind of get the same feeling. But I stopped worrying about the various religious wars and I just use the tools I like.
ZSH is the shell I learned Unix with. ZSH is the shell I know best and thus can do the most awesome stuff with. Hence I'm using ZSH.
Others might have the same feelings towards bash. I totally accept that und usually don't try to "convert" people. But I'm also immune against their efforts in converting me.
I have to agree, zsh is a great shell. My only gripe with it is that compiling it on OS X is a pain in the arse because it depends on a weird documentation language called "yodl" which I haven't so far managed to install. It has some weird custom build system that doesn't seem to work.
It's a shame since I'd like the up-to-date git completions, but because I can't compile zsh I'm stuck with release versions :(
I once had a fairly elaborate zsh setup but over the years I've gradually migrated back to a more minimalistic bash environment instead. The dwim of some of the more exotic zsh completion functions just didn't seem to save me that much time in practice.
Bash is everywhere. It's simple. It's predictable. It just works. It does the things I need it to do. If you use the bash-completion functions in Debian you can even get pretty extensive completion features.
The only standard shell on Unix is the bourne shell, and having things break because someone ignorantly hardcoded bash without using any bash-specific extensions is really annoying.
I agree it's worth the time to find a shell you like and customize it, but that's not a good reason to pick bash.
I don't remember the last time I touched a unix other than Linux or OSX. I don't expect to anytime soon either. It's not out of prejudice either, that's just what people seem to use for most things now. I'm not really willing to sweat hypothetical portability issues between the shell scripts I write for my Linux environments and some potential solaris/bsd user down the road either.
I don't care what you use for your own shell scripts* , I just have a problem with recommending that someone use bash because "it's everywhere".
I think people are better off coding to a standard shell (as necessary), and otherwise using whatever shell makes them happy for day-to-day use. bash isn't actually the former, though, and it has strong competition for the latter, so it's probably a bad compromise.
I think people are better off coding to a standard shell (as necessary), and otherwise using whatever shell makes them happy for day-to-day use.
Sure. I'm just saying that, in my own case, switching from zsh to bash has meant that instead of worrying about making sure that zsh is installed and up to date on all my systems and that all the various addons and plugins I used to need for zsh are available, I just have to make sure my .bashrc is available. And even if it isn't I don't lose much. So I get a functional, familiar environment in all the cases that matter to me with no extra hassles.
My favored point on that continuum is to skip the 'various addons and plugins' and just apt-get install zsh on all my machines. To skip zsh altogether seems like throwing the baby out with the bath water. I tend to think of it as a better bash implementation.
Yeah, and while I don't use zsh, I keep all my emacs config in a git repository with my other dotfiles. That plus apt-get / pkg_add / etc. seems to solve the problem nicely.
I currently use oh-my-zsh on a daily basis, but recently I've been thinking about switching back to the plain old bash shell. I have been frequently stung when new libraries come out that only support bash.
Global aliases are one of the things I love about zshrc. In addition to that, the file globbing is a huge productivity benefit. Being able to use "/foo.txt", rather than "find . -name foo.txt" is nice.
I think that everyone should also learn the cursor movement keybindings (which default to the emacs ones instead of vi ones). I think these might be the same in bash (where C is control and M is meta, likely alt/option or escape):
This will be great. I've been using zsh for probably a year now but I'm definitely underutilizing it. vi mode for zsh seems to be better implemented in zsh and thats something I could definitely not survive without.
It also has a huge library of built-ins (even an FTP client).
People could call it bloated, but I see no difference in performance from Bash, so for me personally, that argument is moot.
What really made ZSH gain a spot in my heart though, is the user-friendly user's guide at
http://zsh.sourceforge.net/Guide/
This is how I learned to use the Unix shell back in 2000. It's not just a brilliant introduction into ZSH itself, it also contains a lot of information about the Unix shell in general and all written in a way that a non-Unix user can easily understand it and very quickly learn all that's needed to be productive on the command line.
Using that guide and ZSH, I learned the Unix shell, so I never bothered to go back to Bash.
Besides, being able to do
scp fi<tab> servern<tab>:/so<tab>
to have it completed to
scp file servername.example.com:/somepath
is just brilliant.
Same goes for contents of tar.(g|b)z(ip|2) archives. Or git commands. Or svn commands.
It's wonderful.
Sorry. Being a fanboy here.