save commit
This commit is contained in:
72
minishell-codex/docs/defensa.md
Normal file
72
minishell-codex/docs/defensa.md
Normal file
@@ -0,0 +1,72 @@
|
||||
# Minishell - Guion de defensa (version codex)
|
||||
|
||||
Este guion esta alineado con la estructura real en `minishell-codex/`.
|
||||
|
||||
## 1. Explicacion corta del proyecto
|
||||
- Minishell es un interprete de comandos interactivo.
|
||||
- Implementa pipes, redirecciones, variables y builtins basicos.
|
||||
- Se basa en el flujo: lectura -> lexer -> parser -> expansion -> ejecucion.
|
||||
|
||||
## 2. Flujo completo (paso a paso)
|
||||
1. `readline()` muestra el prompt y devuelve la linea.
|
||||
2. `lex_line()` divide la linea en tokens (`TOK_WORD`, `TOK_PIPE`, redirecciones).
|
||||
3. `parse_tokens()` construye la pipeline con comandos y redirecciones.
|
||||
4. `expand_pipeline()` aplica expansion de `$VAR` y `$?` respetando comillas.
|
||||
5. `execute_pipeline()` resuelve `PATH`, prepara heredocs y ejecuta.
|
||||
|
||||
## 3. Estructuras clave
|
||||
- `t_token`: tipo y texto de tokens (`minishell-codex/include/minishell.h`).
|
||||
- `t_command`: argv, redirecciones, path.
|
||||
- `t_pipeline`: lista de comandos.
|
||||
- `t_redir`: tipo, target y fd.
|
||||
- `t_shell`: estado global (env, exit_status, flags).
|
||||
|
||||
## 4. Lexer (por que esta separado)
|
||||
- Maneja comillas y metacaracteres sin mezclar con ejecucion.
|
||||
- Detecta errores de comillas sin cerrar.
|
||||
- Facilita el parseo posterior.
|
||||
|
||||
## 5. Parser
|
||||
- Convierte tokens en comandos reales.
|
||||
- Cada `TOK_PIPE` crea un nuevo comando.
|
||||
- Redirecciones se guardan en lista separada (`t_redir`).
|
||||
- Valida errores (pipe sin comando, redireccion sin destino).
|
||||
|
||||
## 6. Expansion
|
||||
- `expand_pipeline()` recorre argv y targets de redireccion.
|
||||
- Reglas:
|
||||
- En comilla simple no se expande.
|
||||
- En comilla doble si se expande.
|
||||
- `$?` es el exit status anterior.
|
||||
|
||||
## 7. Redirecciones y heredoc
|
||||
- `apply_redirections()` abre y hace `dup2()`.
|
||||
- `prepare_heredocs()` genera un pipe con el contenido.
|
||||
- Heredoc no se mete en el historial.
|
||||
|
||||
## 8. Ejecucion y pipes
|
||||
- Si hay un solo builtin, se ejecuta en el padre.
|
||||
- Si hay pipeline, todos se forkean.
|
||||
- Se conectan con `pipe()` y `dup2()`.
|
||||
- Se espera a todos, y el exit status es el del ultimo comando.
|
||||
|
||||
## 9. Builtins
|
||||
- Implementados en `src/builtins/builtins.c`.
|
||||
- `echo`, `cd`, `pwd`, `env`, `export`, `unset`, `exit`.
|
||||
- `export` valida identificadores y permite `KEY=VALUE`.
|
||||
|
||||
## 10. Señales
|
||||
- Una sola global: `g_signal`.
|
||||
- `ctrl-C`: limpia linea y muestra prompt.
|
||||
- `ctrl-\`: se ignora en interactivo.
|
||||
- En child se restauran señales por defecto.
|
||||
|
||||
## 11. Ejemplos rapidos para demostrar
|
||||
- Pipes: `ls | wc -l`
|
||||
- Redireccion: `echo hola > out.txt`
|
||||
- Heredoc: `cat << EOF` -> texto -> `EOF`
|
||||
- Expansion: `echo $HOME`, `echo $?`
|
||||
|
||||
## 12. Mensaje final recomendado
|
||||
"Separar lexer, parser, expansion y ejecucion me permitio mantener el codigo claro
|
||||
y replicar el comportamiento de bash para el minimo requerido por el subject."
|
||||
59
minishell-codex/docs/tests_manual.md
Normal file
59
minishell-codex/docs/tests_manual.md
Normal file
@@ -0,0 +1,59 @@
|
||||
# Minishell - Checklist de pruebas manuales
|
||||
|
||||
Ejecuta en `minishell-codex/`:
|
||||
- `make`
|
||||
- `./minishell`
|
||||
|
||||
## 1. Prompt y salida
|
||||
- Iniciar y salir con `ctrl-D`.
|
||||
- `exit` debe cerrar el shell con el ultimo status.
|
||||
|
||||
## 2. Comandos simples
|
||||
- `ls`
|
||||
- `pwd`
|
||||
- `echo hola`
|
||||
|
||||
## 3. Builtins
|
||||
- `echo -n hola` (sin salto de linea)
|
||||
- `cd /` luego `pwd`
|
||||
- `export TEST=42` luego `env | grep TEST`
|
||||
- `unset TEST` luego `env | grep TEST` (no debe aparecer)
|
||||
- `env` sin argumentos
|
||||
- `exit 2`
|
||||
|
||||
## 4. Expansion
|
||||
- `echo $HOME`
|
||||
- `echo $?` despues de un comando que falle (ej: `ls noexiste`)
|
||||
- `echo '$HOME'` (no expande)
|
||||
- `echo "$HOME"` (si expande)
|
||||
|
||||
## 5. Pipes
|
||||
- `ls | wc -l`
|
||||
- `echo hola | cat`
|
||||
- `cat /etc/passwd | grep root | wc -l`
|
||||
|
||||
## 6. Redirecciones
|
||||
- `echo hola > out.txt` y luego `cat out.txt`
|
||||
- `echo 1 >> out.txt` y luego `cat out.txt`
|
||||
- `cat < out.txt`
|
||||
|
||||
## 7. Heredoc
|
||||
- `cat << EOF`
|
||||
- escribir varias lineas
|
||||
- `EOF`
|
||||
- Ver que se imprime todo lo escrito.
|
||||
|
||||
## 8. Comillas
|
||||
- `echo "a b c"` (una sola palabra)
|
||||
- `echo 'a b c'` (una sola palabra)
|
||||
- `echo "a 'b' c"`
|
||||
|
||||
## 9. Errores de parseo
|
||||
- `| ls` (no debe ejecutar)
|
||||
- `echo hola >` (error)
|
||||
- `echo "hola` (comillas sin cerrar)
|
||||
|
||||
## 10. Senales
|
||||
- `ctrl-C` en prompt: debe limpiar linea y mostrar prompt nuevo.
|
||||
- `sleep 5` y `ctrl-C`: debe interrumpir el proceso.
|
||||
- `ctrl-\` no debe imprimir nada en prompt interactivo.
|
||||
Reference in New Issue
Block a user