1.9 KiB
1.9 KiB
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)
- Prompt con readline.
- Lexer divide la linea en tokens validos (respetando comillas).
- Parser crea comandos, argv y redirecciones.
- Expansion de variables (
VAR,?). - Resolver PATH.
- Ejecutar con fork/execve y pipes.
- 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
- Pipes
ls | wc -l
- Redirecciones
echo hola > out.txtcat < out.txt
- Heredoc
cat << EOF- escribir lineas
EOF
- Expansion
echo $HOMEecho $?
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".