A minimal but complete unix shell
Development Team
Chase Percy
Nunzia Sorrentino
Project Planning and Tools
- Weekly meetings
- Git with GitHub for source control
- Git Flow Model
- Branch Protection
- Build Generation
- Make
- CMake
- CI/CD
- GitHub Actions
- Static Analyzer (CPPCheck)
- Valgrind memcheck
- Make generation testing
- Kanban Board
Overview
This was a fun project to work on and to understand how piping and lower level shell functionality is implemented. We had to implement and design a minimal but complete unix shell using C. Nunzia and I had great time management on this project that lead to a high level of polish and testing of the program. I am very happy with the result of this project!
Features developed by me
Tokenization
The tokenizer is responsible for transforming user input into a format that can be processed when the program creates commands from the input. For the tokenization process, I wanted to ensure that it would scale for any future requirements or larger input from a user. A vector-like data structure was created and used when processing and storing user input to cater for this.
Wildcards
Both the * and ? wildcards are supported and are expanded during the tokenization process.
Command Creation
Command creation is converting the tokens into a format that the shell can process. This considers the ? & ;
separators and separates commands appropriately.
Shell Built-ins
CD, Change the shell prompt, and exit is provided as built-in shell commands that were executed from the parent shell. The only built-in that was executed in a child process was the PWD command so that its output could be used with file redirection and piping between processes.