Métodos
42 (IX): minishell, una terminal desde cero
Recrear bash: parser, pipes, redirecciones, variables de entorno. El proyecto más grande hasta ahora, con entorno MSX limpio para evaluar.

El proyecto que más respeto gana en 42, sin discusión: recrear una shell. Cuando acabas, cada vez que escribes un pipeline en la terminal miras la pantalla con otros ojos. Esta es la historia de mi minishell, que acabó teniendo personalidad propia: estilo MSX BASIC.
Qué pedía el proyecto
Recrear una parte de bash en C: un prompt que lee órdenes, un parser que las convierte en algo ejecutable, un executor que arranca binarios externos y los builtins propios (cd, echo, export, unset, env, pwd, exit), pipes, redirecciones, variables de entorno, y gestionar las señales como toca. Sin banners ni florituras: si el parsing falla, la shell no debe morir nunca.
La arquitectura que usé
Sepa el proyecto en capas claras: parser, executor, builtins, entorno, bucle principal y señales, cada cosa con su módulo. Cuando el camino entre la entrada y la ejecución de una orden pasa por tantas manos, saber dónde vive cada cosa es la diferencia entre avanzar y volverse loco. El repositorio final tiene la documentación completa por módulos, y todavía la uso como referencia.
Los tres obstáculos que recuerdo
Las comillas y la expansión. El parser se lo empassaba todo bien hasta que alguien escribía echo "" "" y una orden perdida por el camino desaparecía. Me costó un debugging entero entender que la expansión vacía es un caso propio, no una excepción.
Ctrl+C. Que la shell ignore la interrupción pero los procesos hijos la reciban es una danza de señales que tuve que reescribir más de una vez. El commit “fix ctrl+c” es de los que más satisfacción me dio.
El “still reachable”. Valgrind salía limpio pero con una coleta: memoria aún accesible. Técnicamente nadie te obliga a liberarla, pero abrí una rama específica para dejar el rastro completamente limpio. Fue una tarea casi terapéutica: cerrar todas las puertas por donde se podría escapar algo.
El detalle que lo hace mío
La presentación con el entorno limpio coincidió con una manera propia de hacer las cosas: el prompt y los mensajes siguiendo el estilo del MSX BASIC, el ordenador con el que empecé. El repositorio se llama minishell_msx por algo: hay un pequeño homenaje dentro.
Fueron más de cien commits, semanas de pruebas y alguna noche larga. Pero desde entonces, cuando hago ls | grep x > salida.txt, sé exactamente qué pasa por debajo. Y eso no se olvida nunca más.