home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / answers / unix-faq / shell / shell-differences < prev    next >
Internet Message Format  |  1993-12-10  |  13KB

  1. Path: senator-bedfellow.mit.edu!bloom-beacon.mit.edu!usc!howland.reston.ans.net!EU.net!uknet!ukc!gos.ukc.ac.uk!bnb
  2. From: bnb@ukc.ac.uk (B.N.Blackmore)
  3. Newsgroups: comp.unix.shell,comp.unix.questions,news.answers,comp.answers
  4. Subject: UNIX Shell differences and how to change your shell (Monthly Posting)
  5. Followup-To: comp.unix.shell
  6. Date: Fri, 10 Dec 93 14:40:54 GMT
  7. Organization: Univeristy of Kent at Canterbury, England, UK
  8. Lines: 207
  9. Sender: bnb@ukc.ac.uk
  10. Approved: news-answers-request@MIT.Edu
  11. Expires: 21 Jan 1994 14:40:53 GMT
  12. Message-ID: <7598@gos.ukc.ac.uk>
  13. NNTP-Posting-Host: gos.ukc.ac.uk
  14. Xref: senator-bedfellow.mit.edu comp.unix.shell:14035 comp.unix.questions:65940 news.answers:15641 comp.answers:2936
  15.  
  16. Archive-name: unix-faq/shell/shell-differences
  17. Version: 1.0
  18.  
  19. The following article answers the frequently asked questions, what
  20. UNIX shells are available, what are the differences between them and
  21. how do you change your interactive shell.
  22.  
  23.    WHY CHANGE YOUR SHELL
  24.  
  25.    The UNIX shell is most peoples main access to the UNIX operating system
  26.    and as such any improvement to it can result in considerably more
  27.    effective use of the system, and may even allow you to do things you
  28.    couldn't do before. The primary improvement most of the new generation
  29.    shells give you is increased speed. They require alot less key strokes to
  30.    get the same results due to their completion features, they give you more
  31.    information eg. showing your directory in your prompt, showing which files
  32.    it would complete to, and they cover some of the more innoying features of
  33.    UNIX, such as not going back up symbolic links to directories.
  34.  
  35.    A BRIEF HISTORY OF UNIX SHELLS
  36.  
  37.    In the near beginning there was the Bourne shell /bin/sh (written by
  38.    S.R.Bourne), it had (and still does) a very strong powerful syntactical
  39.    language built into it, with all the features that are commonly considered
  40.    to  produce  structured  programs,  it  is  particularly  strong
  41.    provisions for controlling input and output and in its expression matching
  42.    facilities. But no matter how strong its input language is, it had one
  43.    major drawback, it made nearly no concessions to the interactive user (the
  44.    only real concession being the use of shell functions and these where only
  45.    added later) and so there was a gap for something better.
  46.  
  47.    Along came the people from UCB and the C-Shell /bin/csh was born. Into
  48.    this shell they put several concepts which where new, (the major of these
  49.    being job control and aliasing) and managed to produce a shell that was
  50.    much better for interactive use. But as well as improving the shell for
  51.    interactive use they also threw out the baby with the bath water and went
  52.    for a different input language.
  53.  
  54.    The theory behind the change was fairly good, the new input language was
  55.    to resemble C, the language in which UNIX itself was written, but they
  56.    made a complete mess of implementing it. Out went the good control of
  57.    input and output and in came the bugs. The new shell was simply too buggy
  58.    to produce robust shell scripts and so everybody stayed with the bourne
  59.    shell for that, but it was considerably better for interactive use so
  60.    changed to the C shell, this resulted in the stupid situation where people
  61.    use a different shell for interactive work than for non-interactive, a
  62.    situation which a large number of people still find themselves in today.
  63.  
  64.    Eventually somebody from AT&T had the bright idea to sort out this mess
  65.    and the Korn Shell /bin/ksh made its appearance. This quite sensibly
  66.    junked the C Shells language and reverted back to the bourne shell
  67.    language, but it also added in the many features that made the C Shell
  68.    good for interactive work (you could say it was the best of both worlds),
  69.    on top of this, it also added a load of features from other operating
  70.    systems (the primary of these being command line editing). The Korn shell
  71.    became very popular but had one major problem, unlike the rest of UNIX it
  72.    wasn't free, you had to pay AT&T for it.
  73.  
  74.    Into this gap GNU launched bash (Bourne again shell), this like the Korn
  75.    Shell was based upon the Bourne shell language and like the Korn Shell it
  76.    also pinched features from the C Shell and other operating systems (in my
  77.    opinion in put them together better, guess which shell I use), but unlike
  78.    the Korn Shell it is free. Bash was quickly adopted for LINUX (where it
  79.    can be made to be just like the Bourne shell), and is the most popular of
  80.    the free new generation shells.
  81.  
  82.    With all this going on the C-Shell users started getting left out, that
  83.    was until tcsh came along. This added in all the extra features that
  84.    ksh/bash nicked from other operating systems on to the standard C-Shell it
  85.    also added in a much enhanced completion system, and fixed nearly all the
  86.    bugs that where present in the standard C-Shell (this still has some
  87.    fairly major bugs in it).
  88.  
  89.    The search for the perfect shell still goes on and the latest entries into
  90.    this arena are zsh and rc. Zsh is a feature packed shell which has so many
  91.    features that I don't even think the author knows all of them. It is still
  92.    a little buggy, although the bugs are slowly being ironed out. Rc is a
  93.    shell which works under the principle of less is more, probably best for
  94.    scripts since it is rumoured to be very fast.
  95.  
  96.    DECIDING ON A SHELL
  97.  
  98.    Which of the many shells you choose depends on many different things, here
  99.    is what I consider to be the most important.
  100.  
  101.    1) How much time do I have to learn a new shell. There is no point in
  102.       using a shell with a different syntax, or a completly different alias
  103.       system if you havn't the time to learn it. If you have the time and are
  104.       presently using csh or tcsh it is worth considering a switch to a bourne
  105.       shell variant.
  106.  
  107.    2) What do I wish to be able to do with my new shell. The main reason for
  108.       switching shells is to gain extra functionality, its vital you know what
  109.       you are gaining from the switch.
  110.  
  111.    3) Do I have to be able to switch back to a different shell. If you may
  112.       have to switch back to a standard shell, it is fairly important you
  113.       don't become too dependant on extra features and so can't use an older
  114.       shell.
  115.  
  116.    4) How much extra load can the system cope with. The more advanced shells
  117.       tend to take up extra CPU, since they work in cbreak mode, if you are on
  118.       an overloaded machine they should probably be avoided, this can also
  119.       cause problems with an overloaded network.
  120.  
  121.    5) What support is given for my new shell. If your new shell is not
  122.       supported make sure you have someone you can ask if in problems or have
  123.       the time to sort them out yourself.
  124.  
  125.    6) What shell am I using already. Switching between certain shells of the
  126.       same syntax is alot easier than switching between shells of a different
  127.       syntax.
  128.  
  129.    7) Can I afford any minor bugs. All shells have some bugs in them
  130.       (especially csh) can you afford the problems that may occur because of
  131.       them.
  132.  
  133.    SHELL FEATURES (0)
  134.                                            sh   csh   ksh  bash tcsh zsh  rc
  135.    Job control                             N    Y     Y    Y    Y    Y    N
  136.    Aliases                                 N    Y     Y    Y    Y    Y    N
  137.    Shell functions                         Y(1) N     Y    Y    N    Y    Y
  138.    "Sensible" Input/Output redirection     Y    N     Y    Y    N    Y    Y
  139.    Directory stack                         N    Y     Y    Y    Y    Y    N
  140.    Command history                         N    Y     Y    Y    Y    Y    N
  141.    Command line editing                    N    N     Y    Y    Y    Y    N(4)
  142.    Vi Command line editing                 N    N     Y    Y    Y(3) Y    N
  143.    Emacs Command line editing              N    N     Y    Y    Y    Y    N
  144.    Rebindable Command line editing         N    N     N    Y    Y    Y    N
  145.    User name look up                       N    Y     Y    Y    Y    Y    N(4)
  146.    Login/Logout watching                   N    N     N    N    Y    Y    N
  147.    Filename completion                     N    Y(1)  Y    Y    Y    Y    N
  148.    Username completion                     N    Y(2)  Y    Y    Y    Y    N
  149.    Hostname completion                     N    Y(2)  Y    Y    Y    Y    N
  150.    History completion                      N    N     N    N    Y    Y    N
  151.    Fully programmable Completion           N    N     N    N    Y    Y    N
  152.    Mh Mailbox completion                   N    N     N    N(4) N(6) N(6) N
  153.    Co Processes                            N    N     Y    N    N    Y    N
  154.    Builtin artithmetic evaluation          N    Y     Y    Y    Y    Y    N
  155.    Follow symbolic links                   N    N     N    Y    Y    Y    N
  156.    Periodic command execution              N    N     N    N    Y    Y    N
  157.    Custom Prompt (easily)                  N    N     N    Y    Y    Y    Y
  158.    Sun Keyboard Hack                       N    N     N    N    N    Y    N
  159.    Spelling Correction                     N    N     N    N    Y    Y    N
  160.    Process Substitution                    N    N     N    Y(2) N    Y    Y
  161.    Underlying Syntax                       sh   csh   sh   sh   csh  sh   rc
  162.    Freely Available                        N    N     N(5) Y    Y    Y    Y
  163.    Checks Mailbox                          N    Y     Y    Y    Y    Y    N
  164.    Tty Sanity Checking                     N    N     ?    N    Y    Y    N
  165.    Can cope with large arguement lists     Y    N     Y    Y    Y    Y    Y
  166.    Can avoid user startup files            N    N     ?    Y    N    Y    N
  167.    Can specify start up file               N    N     ?    Y    N    N    N
  168.  
  169.    0  This table does not include every single possible feature for every
  170.       single possible shell, but it does include all the features that I
  171.       think would make you choose one shell over another. It is *not* a
  172.       definitive list.
  173.  
  174.    1  This feature was not in the orginal version, but has since become
  175.       almost standard.
  176.  
  177.    2  This feature is fairly new and so is often not found on many versions
  178.       of the shell, it is gradually making its way into standard distribution.
  179.  
  180.    3  The Vi emulation of this shell is thought by many to be incomplete.
  181.  
  182.    4  This feature is not standard but unoffical patches exist to perform
  183.       this.
  184.  
  185.    5  A version called 'pdksh' is freely available.
  186.  
  187.    6  This can be done via the shells programmable completion mechanism.
  188.  
  189.    HOW TO CHANGE YOUR SHELL
  190.  
  191.    If you ever look a UNIX manual it will say that to change your shell use
  192.    chsh or passwd -s, unfortunately it normally isn't as simple as this,
  193.    since it requires that your new shell is recognised as a valid shell by
  194.    the system and at present most systems do not recognise the newer shells
  195.    (the normal selection is, /bin/sh, /bin/csh and possibly /bin/ksh). You
  196.    are thus left with having to do some sort of fudge, changing your
  197.    effective login shell without changing your official entry in /etc/passwd.
  198.    You may also be left with the problem that there isn't a compiled binary
  199.    on your system , so you will have to get hold of the shells source and
  200.    compile it yourself (Its generally best to ask around to see if anyones
  201.    done this already, since it isn't that easy. Once done you should add in
  202.    code to your old shells login file so that it overlays your official login
  203.    shell with your new shell (remember to add the login flags to the command
  204.    line, and with csh/tcsh ensure that the overlay doesn't happen recursively
  205.    since they both read the same .login file).
  206.  
  207.    WARNING
  208.  
  209.    If you do decide to change your shell you must be *very* careful, if
  210.    handled wrongly it can be almost impossible to correct, and will almost
  211.    certainly cause you alot of hassle. Never make a new shell a login shell
  212.    until you have tested its new configuration files thoroughly and then
  213.    tested them once again, it is also important that you make a full backup
  214.    of your previous config files onto a floppy disk (or a different host if
  215.    you have a second account) if you have to change any of them (which you
  216.    will probably have to do if you can't change your shell entry in /etc/passwd).
  217.    You should also note that your new shell is probably NOT supported by your
  218.    system admin, so if you have any problems you will probably have to look
  219.    elsewhere.
  220. -- 
  221. Brian Blackmore, Darwin College, The University of Kent at Canterbury, UK.
  222. Beyond the shadow of a dream who knows what lies
  223.