Minishell es una implementación simplificada de un intérprete de comandos (shell) escrita en C, inspirada en bash. El objetivo del proyecto es comprender en profundidad cómo funciona un shell: gestión de procesos, señales, parsing de comandos, redirecciones y pipes.
Este proyecto es típico del currículo de 42, y pone especial énfasis en el manejo correcto de memoria, errores y comportamiento fiel al shell real.
- Prompt interactivo
- Ejecución de comandos mediante
$PATH - Soporte de pipes (
|) - Soporte completo de operadores lógicos:
&&y||y prioridades con() - Capacidad de ejecutar subshells dentro del shell principal
- Redirecciones:
>redirección de salida>>append<redirección de entrada<<heredoc
- Variables de entorno (
$VAR) - Código de salida (
$?) - Builtins implementados:
echocdpwdexportunsetenvexit
- Manejo de señales (
Ctrl-C,Ctrl-D,Ctrl-\)
- Sistema Linux o macOS
gccmake- Librerías estándar de C
Clona el repositorio y compila usando make:
git clone https://github.com/MiguelViHe/Minishell.git cd Minishell makePara limpiar archivos objeto:
make cleanPara limpieza completa:
make fcleanPara recompilar desde cero:
make reUna vez compilado, ejecuta:
./minishellEjemplo de uso dentro del shell:
echo "Hola mundo" ls -l | grep .c cat archivo.txt | wc -l- Parsing manual del input del usuario mediante automata de estados.
- Gestión de procesos con
fork,execveywait - Pipes implementados con
pipe() - Redirecciones usando
dup2() - Manejo de señales con
signal/sigaction - Uso cuidadoso de memoria dinámica (sin leaks)
Minishell/ ├── inc/ ├── src/ ├── submodules/ └── Makefile - Comportamiento simplificado respecto a bash real
Este proyecto permite profundizar en:
- Programación de bajo nivel en C
- Procesos y señales en UNIX
- Diseño de parsers
- Arquitectura de sistemas
Miguel Vidal
GitHub: MiguelViHe
Daniel Palacios GitHub: Leined18
Este proyecto es únicamente con fines educativos.