Description - V7 UNIX & the shells
The Thompson shell, by Ken Thompson of Bell Labs, was distributed as the standard command interpreter, /bin/sh, through Sixth Edition (V6) UNIX. Then, in the Seventh Edition (V7), it was replaced by the Bourne shell. However, the Thompson shell was still distributed with the system as osh (see osh.c) because of known portability problems with the Bourne shell's memory management  in Seventh Edition (V7) UNIX.
There was a problem that does a disservice to the memory of the Thompson shell though. You see, an updated version of the V6 Thompson shell was included, but its installation was broken. There was no glob, if, or goto installed in V7 UNIX for the installed osh to use, and that counts as broken in my book. That said, the included Thompson shell itself would have been enough to help fix things up on a bad Bourne shell day. Still, a shell I like (Thompson) was being replaced by one I don't (Bourne), and that's no fun for me, but that's all fine and makes a certain amount of sense in the end I suppose. Or does it? In any case, I encourage you to read the memory management  page (linked to above) if you never have and/or to reread it if you already have. It's that important, and Dennis (dmr) sums it up very nicely as well.
V6 UNIX & Ken's shell
Since it is not possible to appreciate the true nature of Ken Thompson's shell without having access to the original source code and documentation, this material is provided here under the following Caldera license (pdf) (local copy (pdf)) as a historical reference for the development of etsh. The following Sixth Edition (V6) UNIX source code and documentation was obtained from The UNIX Heritage Society (TUHS, see Dennis_v6). According to the details, these files were provided to TUHS by Dennis Ritchie .
The UNIX Time-Sharing System article gives the theory of operation of both the System and the Shell.
- Thompson shell source code - sh.c (installed as /bin/sh)
- Manuals - sh(I), chdir(I), login(I), newgrp(I), shift(I), wait(I)
The shell made use of the following external utilities.
- The exit(I) command, exit.c (installed as /bin/exit), was used to terminate command files.
- The goto(I) command, goto.c (installed as /bin/goto), was used to transfer the shell's control from one point to another within a command file.
- The if(I) command, if.c (installed as /bin/if), was used to evaluate conditional expressions. This is the predecessor of test(1), which was first released in Seventh Edition UNIX.
The glob(VIII) command,
glob.c (installed as /etc/glob),
was used to expand `
?', and `
[...]' in command arguments.
- Sven Mascheck, who maintains a website about the traditional Bourne shell family (including information about its origins), collected the referenced memory-management notes.
- Before his untimely passing, Dennis M. Ritchie maintained a great deal of important historical information about the early versions of the UNIX operating system on his Dennis Ritchie Home Page. It also includes some information about the shell.
- The Creation of the UNIX Operating System provides a very informative, and pleasant to read, account of the beginnings of the UNIX operating system.