Skip to content

Custom shell implementation in C. Features command execution, pipes, redirections, built-ins, environment variables, signal handling, and quote parsing. Mimics bash behavior.

Notifications You must be signed in to change notification settings

eduaserr/minishell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

minishellminishell

~MINISHELL~
success 100/100

My own shell developed in C.

PROJECT STRUCTURE

minishell/
├── Makefile
├── main.c
├── inc/
│   └── minishell.h
├── lib/
│   └── libft/
│       └── [archivos de libft]
└── src/
    ├── builtins/
    │   ├── builtin.c
    │   ├── cd.c
    │   ├── cd_utils.c
    │   ├── echo.c
    │   ├── env.c
    │   ├── env_utils.c
    │   ├── exit.c
    │   └── pwd.c
    ├── command/
    │   └── cmd.c
    ├── executor/
    │   ├── execute.c
    │   ├── heredoc.c
    │   ├── heredoc_utils.c
    │   ├── pipes.c
    │   ├── redir.c
    │   └── redir_utils.c
    ├── init/
    │   ├── init.c
    │   ├── init_cmd.c
    │   ├── init_env.c
    │   ├── init_redir.c
    │   └── init_tkn.c
    ├── parser/
    │   ├── parser.c
    │   └── promp.c
    ├── quotes/
    │   ├── quotes_check.c
    │   ├── quotes_expand.c
    │   └── quotes_utils.c
    ├── redirs/
    │   └── redirs.c
    ├── signals/
    │   ├── sig_init.c
    │   └── signal2.c
    ├── tokens/
    │   └── tokens.c
    └── utils/
        ├── utils.c
        ├── utils_error.c
        ├── utils_free.c
        ├── utils_print.c
        └── utils_split.c

Organización por módulos:

📁 Archivos principales

  • main.c - Función principal y bucle del shell
  • minishell.h - Header con todas las definiciones.

📁 src/builtins/

  • Implementación de comandos internos (cd, echo, env, exit, pwd, export, unset).

📁 src/command/

  • Gestión y parseo de comandos.

📁 src/executor/

  • Ejecución de comandos, manejo de pipes, redirecciones y heredocs.

📁 src/init/

  • Inicialización de estructuras (shell, env, tokens, comandos, redirecciones).

📁 src/parser/

  • Parseo del input del usuario y generación del prompt.

📁 src/quotes/

  • Manejo de comillas (validación, expansión, utilidades).

📁 src/redirs/

  • Gestión de redirecciones de entrada y salida.

📁 src/signals/

  • Gestión de señales (SIGINT, SIGQUIT, etc.).

📁 src/tokens/

  • Tokenización del input.

📁 src/utils/

  • Funciones auxiliares (errores, liberación de memoria, impresión, split).

📁 lib/libft/

  • Biblioteca de funciones personalizadas con ft_printf y get_next_line.

Esta estructura modular facilita el mantenimiento y desarrollo del proyecto, separando claramente las responsabilidades de cada componente.

CÓDIGOS DE EXIT ESTÁNDAR

Código Significado Ejemplo
0 Éxito echo hello
1 Error general cd directorio_inexistente
2 Uso incorrecto de builtin Error de sintaxis
126 Comando no ejecutable Permisos denegados
127 Comando no encontrado comando_inexistente
128+n Señal fatal Ctrl+C = 130 (128+2)
130 Ctrl+C (SIGINT) Interrumpir comando
131 Ctrl+\ (SIGQUIT) Quit signal

ESTRUCTURA DE DATOS

Después del parsing, la estructura de comandos queda así:

Ejemplo: ls -l -a > file.txt

cmd->args[0] = "ls"
cmd->args[1] = "-l"
cmd->args[2] = "-a"
cmd->args[3] = NULL
cmd->redirs->type = REDIR_OUT
cmd->redirs->file = "file.txt"

COMPILACIÓN Y USO

make
./minishell

CARACTERÍSTICAS IMPLEMENTADAS

  • ✅ Prompt interactivo
  • ✅ Historial de comandos
  • ✅ Ejecución de ejecutables
  • ✅ Builtins: echo, cd, pwd, export, unset, env, exit
  • ✅ Redirecciones: <, >, >>
  • ✅ Heredocs: <<
  • ✅ Pipes: |
  • ✅ Variables de entorno: $VAR
  • ✅ Exit status: $?
  • ✅ Expansión de comillas simples y dobles
  • ✅ Manejo de señales: Ctrl+C, Ctrl+D, Ctrl+\

Proyecto desarrollado como parte del curriculum de 42.

About

Custom shell implementation in C. Features command execution, pipes, redirections, built-ins, environment variables, signal handling, and quote parsing. Mimics bash behavior.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •