My own shell developed in C.
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
📁 Archivos principales
- main.c - Función principal y bucle del shell
- minishell.h - Header con todas las definiciones.
- Implementación de comandos internos (cd, echo, env, exit, pwd, export, unset).
- Gestión y parseo de comandos.
- Ejecución de comandos, manejo de pipes, redirecciones y heredocs.
- Inicialización de estructuras (shell, env, tokens, comandos, redirecciones).
- Parseo del input del usuario y generación del prompt.
- Manejo de comillas (validación, expansión, utilidades).
- Gestión de redirecciones de entrada y salida.
- Gestión de señales (SIGINT, SIGQUIT, etc.).
- Tokenización del input.
- Funciones auxiliares (errores, liberación de memoria, impresión, split).
- 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ó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 |
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"make
./minishell- ✅ 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.

