In this project, you will learn how to develop and implement a Linux/Unix shell. This will give you the opportunity to learn how child processes are created to perform large-grained work and how the parent process can follow up on a child process’s work. This project is to be done on a Linux system and will require your programming in C.
The project has several development parts. As will be explained in the Lab, all parts of the project are required to be completed.
There is a “prequel” assignment (Project 2A: Pseudocode for Implementing a Linux Shell) that is due by the end of the day Friday, 2/25 The 2A assignment requires you to develop a pseudocode solution to the problem BEFORE you begin coding.
There are a number of deliverables for the project, including the source code and documentation for the entire project, documentation for testing and a user guide. Look at the end of the assignment document for sections Project Requirements, Submission, Required Documentation.
You are to write a detailed pseudocode (an informal and high-level description of your algorithms, meant for human reading – look at Wikipedia for pseudocode if you need more of a definition) of how you plan to implement the shell program before you start the actual coding. This pseudocode must also contain a detailed description of any function that you intend to implement. Submit the pseudocode document through Canvas Project 2A: Pseudocode for Implementing a Linux Shell by the end of Friday 2/25. The Project 2A component is part of the assignment and will be graded.
Some students may find that, although we have asked that the project is to be completed in a step-wise fashion, it may be more efficient to design and implement the comprehensive solution that includes all of the required features. You can choose to do this and demonstrate that all the features of all parts are functional from one Shell program.
NOTE: The grading for Project 2 is defined to include Project 2a; together, Project 2 ( worth 8 points) and Project 2A (worth 2 points) combine for 10 Points.
Grading Rubric for Project 2
Project 2 is to be a complete implementation of the shell. You are required to demonstrate and explain your project. The grading rubric is:
|Program||Demo (1.2 pts)||1.2|
|Makefile (0.6 pts)||0.6|
|Reads and processes From Input File [Batch] (0.8 pts)||0.8|
|Built-in Commands (0.8 pts)||0.8|
|Background Execution (0.8 pts)||0.8|
|I/O Redirection (1.2 pts)||1.2|
|Pipes (1.0 pts)||1|
|Report||Readme document (0.8 pts)||0.8|
|Implementation details and source comments (0.8 pts)||0.8|
|Testing, Discussion, Issues, and Results (0.8 pts)||0.8|
This adds up to more than 8 points, so the score will be scaled to 8 points.
In order to guide and encourage your work on the shell development, we are requiring that you submit components of your progress in implementation.
By Monday March 7 you will need to submit through Canvas:
your implementation of the “builtin commands”:
a. cd <directory> – Change the current default directory to
<directory>. If the <directory> argument is not present, report the current directory. If the directory does not exist an appropriate error should be reported. This command should also change the PWD environment variable.
b. clr – Clear the screen.
c. dir <directory> – List the contents of directory <directory>.
d. environ – List all the environment strings.
e. echo <comment> – Display <comment> on the display followed by a new line (multiple spaces/tabs may be reduced to a single space).
f. help – Display the user manual using the more filter.
g. pause – Pause operation of the shell until ‘Enter’ is pressed.
h. quit – Quit the shell.
i. The shell environment should contain shell=<pathname>/myshell where <pathname>/myshell is the full path for the shell executable(not a hardwired path back to your directory, but the one from which it was executed).
The action of these commands are to be implemented by you within your shell program