- sh - a command programming language that executes commands read from a terminal or a file. In this final project for the trimester, me and Amber McBride will code a "simple shell" from scratch. This includes different functions, elements, variables and many other working parts to make this happen. This project will allow us to have a better understanding on the Shell. Something we will be using the rest of our lives.
Resources
Read or watch:
* Unix shell
* Thompson shell
* Ken Thompson
* Everything you need to know to start coding your own shell
man or help:
- sh (Run sh as well)
- Learning Objectives
- At the end of this project, you are expected to be able to explain to anyone, without the help of Google:
General
- Who designed and implemented the original Unix operating system
- Who wrote the first version of the UNIX shell
- Who invented the B programming language (the direct predecessor to the C programming language)
- Who is Ken Thompson
- How does a shell work
- What is a pid and a ppid
- How to manipulate the environment of the current process
- What is the difference between a function and a system call
- How to create processes
- What are the three prototypes of main
- How does the shell use the PATH to find the programs
- How to execute another program with the execve system call
- How to suspend the execution of a process until one of its children terminates
- What is EOF / “end-of-file”?
General Requiremnts:
- Allowed editors: vi, vim, emacs
- All your files will be compiled on Ubuntu 14.04 LTS
- Your C programs and functions will be compiled with gcc 4.8.4 using the flags -Wall -Werror -Wextra and -pedantic
- All your files should end with a new line
- A README.md file, at the root of the folder of the project is mandatory
- Your code should use the Betty style. It will be checked using betty-style.pl and betty-doc.pl
- No more than 5 functions per file
- All your header files should be include guarded
- Use system calls only when you need to (why?)