Minishell es una implementación simplificada de una shell Unix, desarrollada como parte del currículo de la Escuela 42. El objetivo principal es recrear funcionalidades básicas de una shell, incluyendo el análisis y ejecución de comandos, manejo de memoria y diseño modular, todo construido desde cero utilizando una biblioteca de utilidades personalizada (libft
).
- Comprender la gestión de procesos y llamadas al sistema en Unix.
- Implementar análisis léxico y sintáctico de comandos.
- Gestionar la memoria de manera eficiente y prevenir fugas.
- Diseñar una arquitectura de software modular y escalable.
El proyecto sigue una arquitectura modular basada en una biblioteca de utilidades personalizada. Los componentes principales incluyen:
libft
: Biblioteca personalizada que proporciona funciones fundamentales para manipulación de cadenas, gestión de memoria y estructuras de datos.- GNU Readline: Permite la entrada interactiva con soporte de historial y edición de línea.
- Librerías del sistema: Encabezados estándar para E/S, asignación de memoria y llamadas al sistema.
Minishell utiliza dos estructuras de datos primarias para gestionar el estado de la shell y el procesamiento de comandos:
t_data
: Contexto principal de la shell que contiene el prompt del usuario y referencias al analizador.t_parser
: Contenedor de procesamiento de comandos que mantiene la entrada tokenizada como un arreglo de cadenas.
ft_initialize()
configura la estructura de datos principal.ft_read_prompt()
captura la entrada del usuario utilizando readline.ft_tokenize()
divide los comandos en tokens procesables.ft_free_data()
maneja la limpieza de memoria después del procesamiento.
La implementación actual representa la fase fundamental del proyecto Minishell, con manejo básico de entrada y tokenización completados. La arquitectura demuestra una clara separación de responsabilidades con componentes modulares.
- Visualización interactiva del prompt con historial.
- Análisis y tokenización de la entrada de comandos.
- Prevención de fugas de memoria mediante limpieza estructurada.
- Salida de depuración para desarrollo (
print_tokens()
).
- Ejecución de comandos.
- Implementación de comandos integrados (built-ins).
- Operaciones con tuberías (pipes).
Para compilar y ejecutar el proyecto:
make
./minishell
Aquí tienes una recopilación de recursos importantes para el proyecto:
- 📘 Guía completa del proyecto (DeepWiki)
- 📗 Documentación oficial de GNU Readline
- 📙 Normas de codificación de la Escuela 42
- 💻 Proyecto: Minishell – Escuela 42
- ✍️ Autoras originales: Miriam Fernández Pérez y Emilie Sellier