_              _
   / \\   _ __ ___ (_)_ __   ___
  / _ \\ | '_ ` _ \\| | '_ \\ / _ \\
 / ___ \\| | | | | | | | | |  __/
/_/   \\_\\_| |_| |_|_|_| |_|\\___|

I love coding and biology.
As a self-taught developer, I enjoy both sharing knowledge and learning from others.
My inspiration for this website comes from random neocities sites (loving how they all look), and other developers portfolios.

I'm currently studying at 42 Paris.

hello 👁
..

Minishell (A Simple Shell Implementation in C)

Minishell was my deep dive into the world of shell programming and process management in Unix-like systems. This project challenged me to create a basic shell, similar to bash, implementing various features from scratch.

Project Overview

The goal was to develop a functional shell that can:

  • Display a prompt for user input
  • Handle command history
  • Execute commands (using PATH, relative, or absolute paths)
  • Manage quotes and environment variables
  • Implement redirections and pipes
  • Handle signals (ctrl-C, ctrl-D, ctrl-)
  • Include built-in commands like echo, cd, pwd, export, unset, env, and exit

Link to the project on GitHub

Learning Outcomes

This project was a fantastic opportunity to understand the intricacies of process creation, file descriptors, and command interpretation. While my implementation might not be as optimized as professional shells, it provided invaluable insights into:

  • Process management using fork(), execve(), and wait()
  • File descriptor manipulation for redirections and pipes
  • Signal handling in a multi-process environment
  • Parsing and interpreting command-line arguments
  • Managing environment variables

Minishell has significantly deepened my understanding of how shells and command-line interfaces work under the hood. The skills I’ve gained here are directly applicable to more complex system programming projects and have given me a newfound appreciation for the tools we use daily in software development.