Files
minishell/docs/defensa_resumen_es.md
2026-02-09 20:47:43 +01:00

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)

  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
  1. Redirecciones
  • echo hola > out.txt
  • cat < out.txt
  1. Heredoc
  • cat << EOF
  • escribir lineas
  • EOF
  1. 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".