CS 332: Operating Systems

A little command shell

Due 11:10 AM Wednesday, 4/28. Hand in via the Courses system.

Write a small command shell. In particular, your shell should:

  1. Print a prompt.
  2. Get a command line from the user. The command line may include redirections (<, >), pipes (|), and possibly an ampersand (&) at the end of the line.
  3. Search the $PATH environment variable for a program whose name is the first word in the command string, and fork a child process to execute the first such program found, passing the command-line arguments (including the program name itself) to the program (or printing an error message if no command is found). (If the command string includes <, >, or |, the execution of the command will be more complex than this, but analogous.)
  4. wait for the execution to finish (unless the command was terminated with an &, in which case you should go to step 5 immediately).
  5. Go to step 1.

Your shell should also trap Ctrl-C's. Upon receiving a SIGINT, it should tell the user to type Ctrl-] followed by <return> to quit your shell.

You may work with a partner or alone, as you wish.

Here are a few technical points that may interest you:

Important constraints

I would appreciate your assistance in making this program logistically easy to grade. Following these rules will be worth one point.

  1. Write your program in a single source file named shell.c or shell.cpp (all lower case).
  2. If you need to submit a revised version of your program, call it shell1.c. A revision of the revision should be called shell2.c, etc.
  3. Don't submit a folder for this assignment--just shell.c. If you have "readme" information to communicate to me, just put it in the comment at the top of shell.c.