Skip to content

krub-dev/42-MINISHELL

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minishell header krub

Project Progress: 100% Complete!

✅ Phase 1: Infrastructure & Tokenizer - COMPLETE

🚧 Phase 2: Parser & Command Execution - COMPLETE

⏳ Phase 3: Built-ins & Advanced Features - COMPLETE


🔧 Project Overview

Este proyecto implementa un shell similar a bash con una estructura modular bien organizada. El código está diseñado siguiendo principios de programación limpia y mantenible, separando las responsabilidades en diferentes módulos para facilitar su comprensión y futuras extensiones. La arquitectura del proyecto permite gestionar de manera eficiente la entrada de comandos, su análisis sintáctico, y la ejecución de procesos, manteniendo la compatibilidad con las funcionalidades básicas de un intérprete de comandos tipo Unix.

Project Structure

42-MINISHELL/
├── .gitignore
├── CONVENTIONS.md
├── Makefile
├── README.md
├── eval_minishell.pdf
├── minishell.pdf
│
├── includes/
│   └── minishell.h
│
├── libft/                       # Biblioteca de funciones auxiliares
│   ├── ft_*.c                   # 45 funciones de la libft
│   ├── libft.h
│   └── Makefile
│
└── src/
    │
    ├── builtins/                # Comandos integrados del shell
    │   ├── cd.c                 # Cambiar directorio
    │   ├── echo.c               # Imprimir texto
    │   ├── env.c                # Mostrar variables de entorno
    │   ├── exit.c               # Salir del shell
    │   ├── export.c             # Exportar variables
    │   ├── pwd.c                # Directorio actual
    │   └── unset.c              # Eliminar variables
    │
    ├── execution/               # Ejecución de comandos
    │   ├── exec.c               # Ejecutor principal
    │   ├── execution_builtins.c # Ejecución de builtins
    │   ├── execution_helpers.c  # Funciones auxiliares
    │   ├── execution_utils.c    # Utilidades de ejecución
    │   ├── pipes.c              # Gestión de pipes
    │   ├── pipes_exec.c         # Ejecución con pipes
    │   ├── pipes_process.c      # Procesos de pipes
    │   ├── pipes_utils.c        # Utilidades de pipes
    │   ├── redirections.c       # Redirecciones I/O
    │   └── redirections_utils.c # Utilidades de redirecciones
    │
    ├── expansion/               # Expansión de variables
    │   ├── expansion.c          # Expansión principal
    │   ├── expansion_command.c  # Expansión en comandos
    │   ├── expansion_fixed.c    # Correcciones de expansión
    │   ├── expansion_fixed_utils.c
    │   ├── expansion_new.c      # Nueva lógica de expansión
    │   ├── expansion_safe.c     # Expansión segura
    │   └── expansion_utils.c    # Utilidades de expansión
    │
    ├── main/                    # Núcleo del shell
    │   ├── main.c               # Punto de entrada
    │   ├── shell_cleanup.c      # Limpieza de recursos
    │   ├── shell_init.c         # Inicialización
    │   ├── shell_loop.c         # Bucle principal
    │   └── shell_process.c      # Procesamiento de comandos
    │
    ├── parser/                  # Análisis sintáctico
    │   ├── check_syntax.c       # Validación de sintaxis
    │   ├── lexer_free.c         # Liberación de memoria del lexer
    │   ├── lexer_quote.c        # Manejo de comillas
    │   ├── lexer_redirect.c     # Análisis de redirecciones
    │   ├── lexer_tokens.c       # Tokenización
    │   ├── lexer_word.c         # Análisis de palabras
    │   ├── parser_args.c        # Parsing de argumentos
    │   ├── parser.c             # Parser principal
    │   ├── parser_command.c     # Parsing de comandos
    │   ├── parser_redirect.c    # Parsing de redirecciones
    │   └── tokenizer.c          # Tokenizador
    │
    └── utils/                   # Utilidades generales
        ├── env_array.c          # Manejo de arrays de entorno
        ├── env_get_set.c        # Obtener/establecer variables
        ├── env_init.c           # Inicialización del entorno
        ├── env_unset_free.c     # Liberar variables de entorno
        ├── error_print.c        # Impresión de errores
        ├── error_utils.c        # Utilidades de errores
        ├── signal_restore.c     # Restauración de señales
        └── signals.c            # Gestión de señales

Building the Project

make        # Compile the project
make clean  # Remove object files
make fclean # Remove object files and executable
make re     # Rebuild everything
make help   # Show available targets

ROADMAP

INFRAESTRUCTURA (setup inicial) - 100% COMPLETE

Etiquetas: infra, setup

  • Crear estructura de carpetas (src, include, libft, etc.)
  • Crear Makefile con reglas requeridas (all, clean, fclean, re, bonus)
  • Integrar libft con su propio Makefile en /libft
  • Configurar readline e input interactivo básico (mostrar prompt)
  • Configurar manejo de errores y logs
  • Crear documento interno de convenciones (nombres de funciones, estructuras, comentarios)

PARSER - 100% COMPLETE

Etiquetas: parser, core

  • Implementar tokenizer (manejar espacios, comillas simples y dobles)
  • Implementar parser para comandos simples y múltiples
  • Detectar errores de sintaxis (pipes mal cerrados, redirecciones incompletas)
  • Construcción de estructura de comandos (t_command, por ejemplo)
  • Implementar soporte para múltiples comandos conectados por |
  • Manejar redirecciones <, >, >>, << en el parser
  • Detectar y separar built-ins de comandos externos

EJECUCIÓN DE COMANDOS - 100% COMPLETE

Etiquetas: exec, builtin, core

  • Ejecutar comandos externos usando execve con $PATH
  • Implementar built-in: echo con opción -n
  • Implementar built-in: cd con rutas relativas y absolutas
  • Implementar built-in: pwd
  • Implementar built-in: export
  • Implementar built-in: unset
  • Implementar built-in: env
  • Implementar built-in: exit

REDIRECCIONES Y PIPES - 100% COMPLETE

Etiquetas: redirections, pipes, core

  • Implementar redirección de entrada (<)
  • Implementar redirección de salida (>)
  • Implementar redirección en modo append (>>)
  • Implementar heredoc (<<)
  • Implementar ejecución con pipes (|) entre múltiples comandos

EXPANSIÓN DE VARIABLES - 100% COMPLETE

Etiquetas: expansion, env

  • Implementar expansión de variables de entorno ($VAR)
  • Implementar expansión de $? (estado de último comando)
  • Manejar variables dentro de comillas dobles correctamente
  • Evitar expansión dentro de comillas simples

MANEJO DE SEÑALES - 100% COMPLETE

Etiquetas: signals, input

  • Manejar Ctrl-C para cancelar entrada y mostrar nueva línea
  • Manejar Ctrl-D para salir del minishell
  • Manejar Ctrl-\ para que no tenga efecto
  • Usar una sola variable global (solo número de señal recibida)
  • Configurar sigaction y signal según sea necesario

TESTING Y VALIDACIÓN - 100% COMPLETE

Etiquetas: testing, debug, review

  • Crear pruebas básicas con comandos comunes (manual testing implemented)
  • Verificar que no hay segfaults en funcionalidad básica
  • Asegurar compilación sin warnings
  • Verificar comportamiento frente a entradas inválidas
  • Ejecutar con valgrind para revisar leaks
  • Comparar resultados con bash para cada funcionalidad
  • Validar comportamiento con redirecciones múltiples
  • Validar que pipes funcionan en cadena

MANTENIMIENTO Y NORMINETTE - 100% COMPLETE

Etiquetas: style, norm

  • Asegurar cumplimiento de Norminette en todos los .c y .h
  • Dividir código en funciones limpias y reutilizables
  • Documentar funciones clave (///, comentarios)
  • Eliminar funciones no utilizadas o debugging

👥 Integrantes del Proyecto

Nombre GitHub LinkedIn
Kiko @krub-dev Kiko
Oleksii @oreshnyk Oleksii

Proyecto realizado como parte del Common Core 42.
¡Gracias por revisar nuestro trabajo!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published