6 ms·
Because bash is the standard on Linux and every component you add introduces additional complexity and instability. It's fine to add stuff to your home machine,
by maratd 15y ago
Because bash is the standard on Linux and every component you add introduces additional complexity and instability. It's fine to add stuff to your home machine, but you need to be careful with adding things to a server or a work environment. Bash is good enough for almost everything.
- endlessvoid94 15y agoFind me a real world case where switching from bash to zsh was a bad idea.
- adestefan 15y agoIt would be too much of a PITA for me to compile zsh for every OS/arch that I work with in a given day. I ssh to dozens of machines in a day ranging from modern Linux to ancient versions of Solaris and HPUX. Over 10 years ago we added bash to our standard software that will be on every system we have, which means I know that my bash configuration will be the same across every single platform.
- CJefferson 15y agoScripts with no '#' line at the top are run in bash by bash, and in sh by zsh (at least on my machine). I had a program which used a bunch of such scripts, which broke in zsh.
- saurik 15y agoEven if the answer is "none", zsh will need to additionally defend "what is the advantage of zsh for someone who already knows how to use bash", as any form of switch is going to come with a cost. I would therefore be really interested in your reasons (I use bash, as currently do all of the people I know and work with; [edit: apparently except one]). It seems like most of the features listed as better than bash are either a) covered by bash 4.0, b) bad ideas (shared history among sessions), or c) only controversially better (searching around, people seem to argue back/forth about which programmable completion implementation is faster/better).
- xyzzyb 15y agozsh had me when I realized that 1) it's a drop in replacement for bash. All those scripts you have around have #!/bin/bash at the top, they will still work exactly as they always have. 2) You can selectively go back through your command history. You can arrow-up to go to previous commands just like in bash. But if you start a command (say, ssh) and then arrow-up you will then be cycling back through the last ways you entered that command. Super convenient.
- BCM43 15y agoBut if you start a command (say, ssh) and then arrow-up you will then be cycling back through the last ways you entered that command. Like Ctrl+R?
- xyzzyb 15y agoNot exactly, but similar. If you want to see a demo, Ryan Bates highlights this feature (among others) with his ZSH screencast: http://railscasts.com/episodes/308-oh-my-zsh http://railscasts.com/episodes/308-oh-my-zsh
- bretthoerner 15y ago> You can arrow-up to go to previous commands just like in bash. But if you start a command (say, ssh) and then arrow-up you will then be cycling back through the last ways you entered that command. Or, if you'd like to do this in Bash, and any program that uses readline: In ~/.inputrc # Bind the up arrow to history search, instead of history step "\e[A": history-search-backward # And the reverse (down) "\e[B": history-search-forward
- eridius 15y agoI find it easier to just hit ^R when I want to search my history. And since that's a default keybinding, it works on any machine I touch.
- threedaymonk 15y ago
- rwg 15y agoWell, I switched from csh to zsh and almost got arrested. While a senior in high school (~15 years ago), I was also enrolled at the local university and taking a few 1000- and 2000-level Math and CS courses. About halfway into the spring semester, my account on the CS department's crusty old Sun box was locked, and my CS professor that semester told me to report to the system administrator's office after class. When I arrived at the system administrator's office, the department's system administrator and the department head were waiting for me. The sysadmin immediately (and angrily) said that if this were anywhere but a university, he'd see that I was thrown in jail. When I asked what he was talking about, he turned to his computer, banged on the keyboard for a bit, and turned the massive CRT so I could read it. On his screen was an e-mail I had sent him the semester before asking that he change my shell from /bin/csh to /usr/local/bin/zsh. (Solaris of that vintage didn't have chsh, so I couldn't do it myself.) The sysadmin was absolutely convinced that zsh gave me "elevated system privileges", even though he was the one that changed my passwd entry and presumably was the one who compiled and installed zsh in the first place. When I argued that /usr/local/bin/zsh didn't have the suid or sgid bits and therefore gave me no more access to the system than any other shell, the department head scolded me for arguing with the (experienced, wise) sysadmin. The sysadmin changed my shell back to csh, and the department head made me sign a document stating that I wouldn't change my shell back to zsh or try to "further gain administrative access" to the system. On the drive home, I idly wondered whether going to (a different!) college full-time in the fall was really such a hot idea...
- piinbinary 15y agoNot actually zsh's fault, but that's pretty amusing (now, at least - I bet it wasn't amusing then).
- snprbob86 15y agoWith the caveat that you should always pick your battles... You should have never signed that. Even if you struck the word "further", it'd probably be seen as an admission of guilt in court.
- mgedmin 15y agoI tried, for a week, got very frustrated and switched back. The little itch that drove me crazy was command-line editing: in bash (and all readline apps) when I have command long/path/to/some/file I can press Alt-Backspace to delete 'file', or I can press Ctrl-W to delete 'long/path/to/some/file'. I tried various hacks to make zsh do the same, then gave up.
- shabble 15y agobindkey '^[^?' backward-kill-word might do the trick? (possibly '^[^h' depending on what your backspace key sends. Ctrl-v <backspace> should give you something you can copy)
- mgedmin 15y agoThis makes Alt-Backspace do the same thing as Ctrl-W, which is delete-everything-until-the-next-space. I'm missing the delete-last-segment-of-the-path function. Edit: I know I can customize the word style using $WORDCHARS, or 'autoload select-word-style'; my problem is that I'm used to having the capability to use two different word styles at once. I'm looking through the command list in zshzle(1), and I'm a bit confused about the differences between backward-delete-word and backward-kill-word. Some short experiments I did failed to notice any differences (foo/bar/baz M-x backward-delete-word deletes foo/bar/baz). There's also vi-backward-kill-word which deletes 'baz', then '/', then 'bar', then '/', then 'foo'. I want a key to delete 'baz', then 'bar/', then 'foo', and I've no idea how to get it...
- shabble 15y agoHrmm. It works as you want for me, but there may be some other config item I've set. The other alternative is to try: autoload -U select-word-type select-word-type bash which should override C-w to do what you want. I haven't looked at it enough to see if you can get both behaviours simultaneously though (and it requires a fairly recent zsh iirc)
- kree10 15y agoSo you could say bash is the Internet Explorer of shells. It's the default, it's what most people use, and it's good enough.
- maratd 15y agoNo, I would not say that. Internet Explorer is the default on Windows because Microsoft makes it, not because it's the best option for a default. Bash is the default because it's the best shell to be used as a default. Nobody is twisting the arm of any distribution, but they set it as the default anyway. There's a reason for that.
- grogs 15y agoBecause it was at some point when the decision was made, for a few distributions. How often is this decision re-evaluated? ...personally I just hit Ctrl+C again to reset my prompt.
- kree10 15y agoI think that reason is mostly inertia. Also, because it's GNU. Just as IE is the Microsoft browser, bash is the GNU shell, and most Linux distributions are built around GNU userland. But that's just Linux. The BSDs don't see bash as the best default, where it tends to only be available as an optional package.