Un shell minimal développé en C dans le cadre du cursus 42. Ce projet implémente les fonctionnalités de base d'un shell Unix avec gestion des commandes, redirections, pipes et variables d'environnement.
Minishell (surnommé "Mininours") est une implémentation simplifiée d'un shell Unix. Il permet d'exécuter des commandes, de gérer les variables d'environnement, et d'utiliser les fonctionnalités de base d'un terminal interactif.
echo- Affiche du texte avec option-ncd- Change de répertoirepwd- Affiche le répertoire courantexport- Définit ou affiche les variables d'environnementunset- Supprime des variables d'environnementenv- Affiche l'environnementexit- Quitte le shell
- Exécution de commandes : Programmes externes et chemins absolus/relatifs
- Variables d'environnement : Support complet avec expansion
$VAR - Redirections :
>: Redirection de sortie>>: Redirection en mode append<: Redirection d'entrée<<: Here document
- Pipes : Communication entre processus avec
| - Gestion des guillemets : Simple
'et double" - Gestion des signaux :
Ctrl+C,Ctrl+D,Ctrl+\ - Historique : Navigation dans l'historique des commandes
- GCC ou Clang
- Make
- Readline library (
libreadline-devsur Ubuntu/Debian)
# Cloner le projet
git clone [URL_DU_REPO]
cd mininours
# Compiler
make
# Lancer le shell
./minishellmake # Compile le projet
make clean # Supprime les fichiers objets
make fclean # Supprime tout (objets + exécutable)
make re # Recompile toutmininours/
├── headers/ # Fichiers d'en-tête
│ ├── minishell.h # Déclarations principales
│ └── structures.h # Structures de données
├── libft/ # Bibliothèque personnelle
├── libUtils/ # Utilitaires pour les listes
├── src/ # Code source principal
│ ├── main.c # Point d'entrée
│ ├── built-in/ # Commandes intégrées
│ ├── exec/ # Système d'exécution
│ ├── parsing/ # Analyseur syntaxique
│ ├── signals/ # Gestion des signaux
│ └── utils/ # Fonctions utilitaires
└── Makefile # Script de compilation
# Commandes simples
ls -la
echo "Hello World"
cd /tmp
# Variables d'environnement
export MY_VAR="test"
echo $MY_VAR
unset MY_VAR
# Redirections
ls > output.txt
cat < input.txt
echo "line" >> file.txt
# Pipes
ls | grep .c
cat file.txt | wc -l
# Here document
cat << EOF
Ceci est un
here document
EOFecho 'Simple quotes: $USER' # Affiche littéralement $USER
echo "Double quotes: $USER" # Expand la variable $USERLe projet inclut un fichier de suppression Valgrind pour le debugging :
valgrind --leak-check=full --suppressions=suppression.supp ./minishell- Parsing : Utilise un tokenizer pour analyser les commandes
- Exécution : Fork/exec pour les processus enfants
- Mémoire : Gestion rigoureuse avec fonctions de libération
- Signaux : Handlers personnalisés pour les interruptions
- Readline : Interface utilisateur avec historique et édition
Ce projet permet d'apprendre :
- La programmation système en C
- La gestion des processus et des signaux
- Le parsing et l'analyse syntaxique
- La gestion de la mémoire
- L'architecture logicielle modulaire
- abosc | Développeur principal
- alegrix | Développeur principal
Ce projet est développé dans le cadre du cursus 42. Voir les règles de l'école pour l'utilisation du code.
"Un shell minimal mais fonctionnel - Mininours raconte nours une histoire !" 🐻