# 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".

