Archive-name: unix-faq/shell/shell-differences Version: 1.19The following article answers the frequently asked questions, what UNIX shells are available, what are the differences between them and how do you change your interactive shell. It is posted monthly to the USENET newsgroups comp.unix.shell, comp.unix.questions, news.answers and comp.answers and is additionally available on the world wide web as http://www.looking-glass.org/shell.html
In the near beginning there was the Bourne shell /bin/sh (written by S. R. Bourne). It had (and still does) a very strong powerful syntactical language built into it, with all the features that are commonly considered to produce structured programs; it has particularly strong provisions for controlling input and output and in its expression matching facilities. But no matter how strong its input language is, it had one major drawback; it made nearly no concessions to the interactive user (the only real concession being the use of shell functions and these were only added later) and so there was a gap for something better.
Along came the people from UCB and the C-shell /bin/csh was born. Into this shell they put several concepts which were new, (the majority of these being job control and aliasing) and managed to produce a shell that was much better for interactive use. But as well as improving the shell for interactive use they also threw out the baby with the bath water and went for a different input language.
The theory behind the change was fairly good, the new input language was to resemble C, the language in which UNIX itself was written, but they made a complete mess of implementing it. Out went the good control of input and output and in came the bugs. The new shell was simply too buggy to produce robust shell scripts and so everybody stayed with the Bourne shell for that, but it was considerably better for interactive use so changed to the C shell, this resulted in the stupid situation where people use a different shell for interactive work than for non-interactive, a situation which a large number of people still find themselves in today.
After csh was let loose on an unsuspecting world various people decided that the bugs really should get fixed, and while they where at it they might as well add some extra features. In came command line editing, TENEX-style completion and several other features. Out went most of the bugs, but did the various UNIX operating system manufacturers start shipping tcsh instead of csh? No, most of them stuck with the standard C-Shell, adding non-standard features as they went along.
Eventually David Korn from AT&T had the bright idea to sort out this mess and the Korn shell /bin/ksh made its appearance. This quite sensibly junked the C shells language and reverted back to the bourne shell language, but it also added in the many features that made the C shell good for interactive work (you could say it was the best of both worlds), on top of this, it also added a some features from other operating. The Korn shell became part of System V but had one major problem; unlike the rest of the UNIX shells it wasn't free, you had to pay AT&T for it.
It was at about this time that the first attempts to standardize UNIX started in the form of the POSIX standard. POSIX specified more or less the System V Bourne Shell (by this time the BSD and System V versions had got slightly different). Later the standard is upgraded, and somehow the new standard managed to look very much like ksh.
Also at about this time the GNU project was underway and they decided that they needed a free shell, they also decided that they wanted to make this new shell POSIX compatible, thus bash (the Bourne again shell) was born. Like the Korn shell bash was based upon the Bourne shells language and like the Korn shell, it also pinched features from the C shell and other operating systems (in my opinion it put them together better; guess which shell I use), but unlike the Korn shell it is free. Bash was quickly adopted for LINUX (where it can be configured to perform just like the Bourne shell), and is the most popular of the free new generation shells.
Meanwhile Tom Duff faced with the problem of porting the Bourne shell to Plan 9, revolts and writes rc instead, he publishes a paper on it, and Byron Rakitzis reimplements it under UNIX. With the benefit of a clean start Rc ended up smalled, simpler, more regular and in most peoples opinion a much cleaner shell.
The search for the perfect shell still goes on and the latest entry into this arena is zsh. Zsh was written by Paul Falstad while he was a student a Princeton and suffers from slight case of feeping creaturism. It is based roughly on the bourne shell (although there are some minor but important differences) and has so many additional features that I don't even think the author even knows all of them.
Additionally rc has been enhanced to produced es, this shell adds the
ability for the user to redefine low level functions.
Deciding on a shell
Which of the many shells you choose depends on many different things, here
is what I consider to be the most important, you may think differently.
sh csh ksh bash tcsh zsh rc es Job control N Y Y Y Y Y N N Aliases N Y Y Y Y Y N N Shell functions Y(1) N Y Y N Y Y Y "Sensible" Input/Output redirection Y N Y Y N Y Y Y Directory stack N Y Y Y Y Y F F Command history N Y Y Y Y Y L L Command line editing N N Y Y Y Y L L Vi Command line editing N N Y Y Y(3) Y L L Emacs Command line editing N N Y Y Y Y L L Rebindable Command line editing N N N Y Y Y L L User name look up N Y Y Y Y Y L L Login/Logout watching N N N N Y Y F F Filename completion N Y(1) Y Y Y Y L L Username completion N Y(2) Y Y Y Y L L Hostname completion N Y(2) Y Y Y Y L L History completion N N N Y Y Y L L Fully programmable Completion N N N N Y Y N N Mh Mailbox completion N N N N(4) N(6) N(6) N N Co Processes N N Y N N Y N N Builtin artithmetic evaluation N Y Y Y Y Y N N Can follow symbolic links invisibly N N Y Y Y Y N N Periodic command execution N N N N Y Y N N Custom Prompt (easily) N N Y Y Y Y Y Y Sun Keyboard Hack N N N N N Y N N Spelling Correction N N N N Y Y N N Process Substitution N N N Y(2) N Y Y Y Underlying Syntax sh csh sh sh csh sh rc rc Freely Available N N N(5) Y Y Y Y Y Checks Mailbox N Y Y Y Y Y F F Tty Sanity Checking N N N N Y Y N N Can cope with large argument lists Y N Y Y Y Y Y Y Has non-interactive startup file N Y Y(7) Y(7) Y Y N N Has non-login startup file N Y Y(7) Y Y Y N N Can avoid user startup files N Y N Y N Y Y Y Can specify startup file N N Y Y N N N N Low level command redefinition N N N N N N N Y Has anonymous functions N N N N N N Y Y List Variables N Y Y N Y Y Y Y Full signal trap handling Y N Y Y N Y Y Y File no clobber ability N Y Y Y Y Y N F Local variables N N Y Y N Y Y Y Lexically scoped variables N N N N N N N Y Exceptions N N N N N N N Y
The shell can be recognized as a valid shell if the system administrator
puts it in the file /etc/shells. If this file does not exist, it
must be created and should contain all valid shells (i.e.don't forget the
traditional ones in all their forms).
WARNING If you do decide to change your shell
you must be very careful - if handled wrongly it can be
almost impossible to correct, and will almost certainly cause you a lot of
hassle. Never make a new shell a login shell until you have tested its new
configuration files thoroughly and then tested them once again. It is also
important that you make a full backup of your previous config files onto a
floppy disk (or a different host if you have a second account) if you have
to change any of them (which you will probably have to do if you can't
change your shell entry in /etc/passwd). You should also note
that your new shell is probably not supported by your
system admin, so if you have any problems you will probably have to look
The Bourne shell, the C-Shell and the Korn Shell (if you have it) are all
distributed as standard with your UNIX operating system, information on
these should come with your operating system, bug reports etc should be sent
to your operating system vendor. The free version of ksh, pdksh is available as
A commercial "compiler" (CCsh) is available for the Bourne shell, this can provide extra speed on some applications. For more information contact Comeau Computing 91-34 120th Street, Richmond Hill, NY, USA 11418-3214. Email firstname.lastname@example.org.
Bash was written and is maintained by the Free Software Foundation, the primary source of information for this shell is its manual page. Bug reports should be sent to bash-maintainers@ai.MIT.Edu, while suggestions and philosophical bug reports may be mailed to bug-bash@ai.MIT.Edu or posted to the Usenet newsgroup gnu.bash.bug, the source is widely available on many ftp sites, and is subject to the GNU copyleft licence.
Tcsh is available by ftp from ftp://ftp.deshaw.com and several other places.
Rc is available by ftp from ftp://viz.tamu.edu/pub/rc, ftp://ftp.sys.utotonoto.cs/pub/rc and several other places. An FAQ exists and is posted frequently to comp.unix.shell and other places. The Rc mailing list may be subscribed to by sending mail to email@example.com, this, the manual page and the Rc FAQ are the main sources of information for this shell. The original paper on rc is available as http://plan9.att.com/plan9/plan9doc/7.ps.Z.
Zsh is available by ftp from ftp://ftp.math.gatech.edu/pub/zsh and at several mirror sites. Zsh is now maintained by the members of the zsh mailing lists, which can be subscribed to by sending email to firstname.lastname@example.org (announcements), email@example.com (users discussions) or firstname.lastname@example.org (zsh hacking and development) with a subject of "subscribe email-address", there is also an FAQ which is posted frequently to comp.unix.shell. The manual page, the Z-shell FAQ and the zsh-list are the main sources of information for this shell.
ES is available by ftp from ftp://ftp.cs.utoronto/pub/es and at several other places, a mailing list can be subscribed to by sending mail to email@example.com and a paper about es is at http://www.webcom.com/~haahr/es/es-usenix-winter93.html.
Questions on any of the UNIX shells and on shell script programming, may be posted to the Usenet newsgroup comp.unix.shell a quick response can normally be expected, especially on subjects relating to the more common shells.
Copyright and Disclaimer Copyright to
this document is kept by the author, but freedom is given to distribute it
as long as no money is made from its distribution, without the prior concent
of the author. The author also does not guarantee that the information it
contains is correct, although every effort is done to ensure that it is.
Email relating to the content of this document should be sent to firstname.lastname@example.org.
Brian Blackmore, email@example.com