Minishell

✨ Minishell c'est quoi ?

Minishell est un projet de l'école 42 qui consiste à recréer un shell minimaliste en C. Un shell est un interpréteur de commandes qui permet à l'utilisateur d'interagir avec le système d'exploitation. Il permet d'exécuter des commandes, de lancer des programmes, de gérer des fichiers, etc.

🚀 Fonctionnalités

  • Gestion des commandes internes (echo, cd, pwd, export, unset, env, exit)
  • Gestion des commandes externes (ex: ls, cat, grep, vim, ...)
  • Gestion des pipes (|)
  • Gestion des redirections (>, >>, <)
  • Gestion des variables d'environnement
  • Gestion des signaux (Ctrl-C, Ctrl-\, Ctrl-D)
  • Gestion des expansions de commandes (ex: echo $PATH)
  • Gestion des erreurs et des retours de commandes

☝️ Comment on fait ?

Le projet se divise en deux parties :

  1. Le parsing :
    • On récupère la commande de l'utilisateur
    • On sépare les éléments de la commande (commande, arguments, redirections, pipes, variables d'environnement, etc)
    • On traite les erreurs de parsing (gestion des quotes, des espaces, des caractères spéciaux, etc)
    • On stocke les éléments de la commande dans une structure de données avec un espace différent pour chaque type d'élément
    • Et chaque nouvelle commande a une nouvelle structure de données (ex : ""ls -l | grep test"" a deux structures de données)
    • On gère les expansions de commandes (ex: echo $PATH)

☝️ Alors oui ca aurait été plus simple de faire un tokeniser mais sur le moment je ne savais pas ce que c'était et je suis parti sur une approche plus simple.

  1. L'exécution :
    • On exécute les commandes internes (ex: echo, cd, pwd, export, unset, env, exit)
    • On exécute les commandes externes (ex: ls, cat, grep, vim, ...)
    • On gere les pipes (|) et les redirections (>, >>, <)
    • On gère les signaux (Ctrl-C, Ctrl-\, Ctrl-D)
    • On gère les erreurs et les retours de commandes

🥺 Tu veux tester ?

Clone le repo, compile le projet a l'aide du Makefile et lance le programme avec la commande ./minishell.

git clone https://github.com/Rockmard/minisHELL.git minishell

cd minishell

make

./minishell

💡 Tu veux plus d'info ?