minishell: My very own handmade computer shell

minishell: My very own handmade computer shell
Photo by Gabriel Heinzer / Unsplash

At the time of writing, minishell is my biggest coding project thus far. Biggest in all possible ways. Most complex, most time-consuming, most frustrating and most rewarding.


This project from école 42 is about creating your own mini-version of the bash shell. But don't let yourself be fooled by the 'mini' part, it took me and my friend more than 6 weeks to understand the subject, design our solution and make it reach the 42 quality level of zero bugs in our code.

what I learned

By doing this project, I finally got a solid understanding of the bash syntax in the command line. I also learned how shells generally work and are implemented, and how this implementation is generally divided in 4 phases.

Lexer -> Expander -> Parser -> Executor
The 4 phases of our minishell

However, my biggest lesson, I would say, was learning to deal with project that is bigger than your short term memory can handle. By this I mean that the project was so big, that I was forced to write understandable and modular code, as well as write good enough documentation so that the future me could actually understand what the heck I was thinking 3 weeks ago. This was a new experience.

To that also comes the lesson of working together with somebody on a code project. Writing good code to please yourself is one thing, writing it in such a way that somebody else also can make sense of it and going into the creative and puzzle process together, is something completely different. I'll be honest and say that it was frustrating from time to time, but that was mostly because it was confrontational to discovering my own personal fallacies and not self-evident thinking patterns.

All in all, it gave me a better taste of how coding in the real world is like.

the code

You can find the code in the repository linked below, alongside with an explaination on how to run it. Despite the project is over and validated by 42, feedback is very much appreciated!

Yannick / Minishell · GitLab