Link: github.com/edu-bm7/minishell

Collaborating in a two-member team, I undertook the ambitious task of developing a Linux shell at 42 São Paulo. This project marked my first significant challenge in software engineering, where I delved into the intricacies of the Bash shell. Our objective was to replicate various Bash functionalities using C programming with a deadline of 6 weeks.

Key features implemented included:

  • Pipe: Allowing for the output of one command to serve as the input to another, facilitating complex command sequences.
  • Logical Operators (AND, OR): Enabling conditional execution of commands based on the success or failure of previous commands.
  • Redirections and Heredoc: Redirecting input and output streams and implementing heredoc for multiline string input.
  • Environment Variables: Handling variables that affect the behavior of the shell and user interface.
  • Exit Status: Tracking and reporting the exit status of commands to enable error handling.
  • Quotation Handling: Accurately processing single and double quotes in command inputs.
  • Command History: Maintaining a history of executed commands for easy recall and execution.
  • Built-in Commands: Implementing essential built-ins like 'echo', 'env', 'cd', and others, to mimic the core functionalities of Bash.

To manage our tasks efficiently within the deadline, we employed the Kanban methodology, which enhanced our workflow and prioritization skills. Each week involved iterative development, testing, and refinement, simulating a real-world software development environment.

Moreover, we utilized version control systems extensively to track and manage changes in the project, ensuring a systematic and collaborative coding environment. This experience was instrumental in honing my technical skills, particularly in system programming, and in developing my competencies in teamwork, and project management under tight deadlines.

minishell image