# Minishell - Resumen para defensa Este documento es un guion breve para explicar el proyecto con claridad. ## 1. Que es minishell - Un shell interactivo basico: lee comandos, los parsea y los ejecuta. - Objetivo didactico: procesos, pipes, fds, seƱales y parsing. ## 2. Flujo general (en 20 segundos) 1. Prompt con readline. 2. Lexer divide la linea en tokens validos (respetando comillas). 3. Parser crea comandos, argv y redirecciones. 4. Expansion de variables ($VAR, $?). 5. Resolver PATH. 6. Ejecutar con fork/execve y pipes. 7. Actualizar exit status. ## 3. Puntos clave que suelen preguntar ### Comillas - Comilla simple: todo literal, no expansion. - Comilla doble: expansion de $VAR, pero no metacaracteres. - Si una comilla no se cierra: error y no se ejecuta nada. ### Redirecciones - <, >, >>, <<. - Se resuelven antes de ejecutar el comando. - Heredoc: lectura hasta delimitador, sin historial. ### Pipes - Conecto stdout del comando i con stdin del comando i+1. - Uso pipe() y dup2() en el child. - El padre cierra fds que no usa. ### Builtins - echo -n, cd, pwd, export, unset, env, exit. - Si no hay pipeline, se ejecutan en el padre para afectar el estado. - En pipeline, se ejecutan en el child. ### Variables - $VAR: entorno. - $?: ultimo exit status. ### Senales - Una sola variable global para la senal. - ctrl-C: nueva linea y prompt. - ctrl-D: salir del shell. - ctrl-\: no hace nada. ## 4. Ejemplos rapidos para demostrar 1. Pipes - `ls | wc -l` 2. Redirecciones - `echo hola > out.txt` - `cat < out.txt` 3. Heredoc - `cat << EOF` - escribir lineas - `EOF` 4. Expansion - `echo $HOME` - `echo $?` ## 5. Errores y robustez - No ejecuto si hay errores de parseo. - Mensajes con perror cuando fallan syscalls. - exit_status siempre actualizado. ## 6. Mensajes finales recomendados - "He separado parsing y ejecucion para que el codigo sea mantenible y la defensa mas clara". - "Sigo el comportamiento de bash como referencia".