78 lines
1.9 KiB
Markdown
78 lines
1.9 KiB
Markdown
# 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".
|
|
|