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

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors