This project is a part of the ALX Software Engineering curriculum, specifically designed to challenge your skills in programming basics, C language fundamentals, engineering thinking, and collaborative work. It provides an opportunity to showcase your knowledge in various areas and reinforces the importance of learning how to learn.
- Framework: Ensure you are familiar with the project framework, which can be found here.
- No Code Copying: Copying or looking at other people's code, including online articles or videos, is strictly prohibited. The emphasis is on learning, understanding, and creating solutions independently.
- Use of AI Tools: While ChatGPT and similar tools are encouraged within the framework, they should not be used to directly code the solution. Focus on understanding and learning.
By the end of this project, you should be able to explain:
- The designers and implementers of the original Unix operating system.
- The creator of the first version of the UNIX shell.
- The inventor of the B programming language, a direct predecessor to the C programming language.
- Basics of how a shell works, including processes, environment manipulation, system calls, and more.
- Editors: You can use vi, vim, or emacs for coding.
- Compilation: All files will be compiled on Ubuntu 20.04 LTS using gcc with specific options (-Wall -Werror -Wextra -pedantic -std=gnu89).
- Coding Style: Follow the Betty style. Check your code using betty-style.pl and betty-doc.pl.
- Memory Management: Ensure your shell has no memory leaks.
- Functions per File: Restrict the number of functions per file to a maximum of 5.
- Header Files: All header files should be include guarded.
- System Calls: Use system calls only when necessary.
- README: Include a README.md file at the root, describing your project.
- This is a group project, and both partners are equally responsible for everything pushed to GitHub.
- Actively work together, ensuring both partners understand every line of code.
- Notify staff and your partner if you cannot work on the project.
- Plagiarism will not be tolerated, and both partners will be held responsible for any violations.
- Your program's output should match that of /bin/sh (sh) precisely.
- Error messages should follow the same format as sh.
- Example of error:
$ echo "qwerty" | ./hsh ./hsh: 1: qwerty: not found
- A list of allowed functions and system calls is provided in the project description.
- Compile your shell using the provided gcc command.
- Test your shell both in interactive and non-interactive modes to ensure correct functionality.
By completing this project, you are expected to achieve the following learning outcomes:
- Understanding the historical context of Unix, its creators, and the development of the shell.
- Gaining proficiency in C programming basics, system calls, and memory management.
- Enhancing collaboration skills through group work and shared responsibility.
- Strengthening problem-solving abilities and the capacity to learn independently.
- Read or watch materials related to Unix shell, Thompson shell, Ken Thompson, and the concepts provided in the "Everything you need to know to start coding your own shell" page.
The Simple Shell project offers a unique opportunity to apply your programming knowledge, enhance collaboration skills, and delve into the intricacies of shell development. Remember, at ALX SE, the focus is not just on solutions but on the journey of creating them. Happy coding!