ft_minishell
Un shell minimal en C : invite, recherche dans le PATH, commandes internes
Projet d'école (42)mars 2015CMakePOSIX (fork, execve)
Projet de l’école 42 (mars 2015) : un interpréteur de commandes minimal en C. Il lit une ligne, cherche l’exécutable dans le PATH, le lance avec fork et execve, et gère son propre environnement avec les commandes internes cd, env, setenv, unsetenv et exit.
But du projet
Premier projet « shell » du cursus Unix de l’école 42 (binaire ft_minishell1). Il fait manipuler les bases d’un interpréteur : création de processus avec fork, execve et wait, résolution des commandes dans le PATH, gestion des variables d’environnement et des signaux.
Fonctionnalités
- Invite affichant le répertoire courant.
- Exécution par chemin (
/bin/ls,./a.out) ou par recherche dans les dossiers duPATH, avec des messages distincts pour « programme introuvable » et « pas le droit d’exécution ». cd: sans argument ou avec~, utiliseHOME; met à jourPWD.env: affiche l’environnement, ou lance une commande avec (env ls) ou sans environnement (env -i ls).setenv CLE=valeurousetenv CLE valeur 1(le dernier argument autorise l’écrasement),unsetenv CLE(refusé pourPATHetPWD),exit.- Ctrl+C demande une confirmation avant de quitter, Ctrl+D quitte ; une ligne terminée par
\continue sur la suivante. - Lancé avec un environnement vide, le shell crée
PWDetPATH=/bin.
Fonctionnement
L’environnement hérité (environ) est copié dans une liste doublement chaînée, accessible via un singleton, puis reconverti en tableau CLE=valeur à chaque execve. La ligne est lue par blocs de 1024 octets et découpée sur les espaces et tabulations : pas de guillemets, de tubes ni de redirections. Le projet embarque sa propre version de la libft.
Compilation
make
./ft_minishell1Le code a été écrit pour les Mac de l’école en 2015. Sous Linux, la compilation échoue en l’état avec -Werror : wait() est utilisé sans inclure <sys/wait.h>.