Minishell es un proyecto de la escuela 42 que consiste en crear un shell minimalista similar a Bash. Este desafío pondrá a prueba tus conocimientos sobre procesos, señales, pipes y gestión de memoria en C.
Tu objetivo es implementar un intérprete de comandos que permita ejecutar programas, gestionar la entrada y salida estándar y manejar señales como un shell real.
- Mostrar un prompt interactivo.
- Ejecutar comandos y manejar argumentos.
- Implementar pipes (
|) para conectar la salida de un comando con la entrada de otro. - Gestionar la redirección de entrada (
<,<<) y salida (>,>>). - Manejar variables de entorno (
$PATH,$HOME, etc). - Implementar algunos built-ins (
echo,cd,pwd,export,unset,env,exit). - Capturar y manejar señales (
CTRL+C,CTRL+D,CTRL+\).
Compila el proyecto con:
# Clonar el repositorio
git clone git@github.com:pauss12/Minishell.git
cd minishell
# Compilar el proyecto
make
# Ejecutar
./minishellEjemplo de uso dentro del shell:
$ echo "Hola, mundo"
Hola, mundo
$ ls -la | grep minishell
$ cat archivo.txt > salida.txt
$ exit| Comando | Descripción |
|---|---|
echo |
Imprime texto en la salida estándar. |
cd |
Cambia de directorio. |
pwd |
Muestra el directorio actual. |
export |
Define variables de entorno. |
unset |
Elimina variables de entorno. |
env |
Muestra variables de entorno activas. |
exit |
Cierra la terminal. |
- Manejo de pipes (
|): Permite encadenar comandos como en Bash. - Redirección de Entrada y Salida:
>para redirigir salida a un archivo (sobreescribe).>>para redirigir salida a un archivo (añade).<para redirigir entrada desde un archivo.<<para hacer un here doc
- Señales:
CTRL+Cpara interrumpir un proceso en ejecución.CTRL+Dpara cerrar el shell.CTRL+\para finalizar un proceso en ejecución.
Verifica memoria con valgrind:
Hay que ignorar los leaks de readline
@valgrind -s --trace-children=yes --track-fds=yes --track-origins=yes --leak-check=full ./minishellEste proyecto no hubiera sido posible sin el incansable trabajo en equipo con pauss12, quien soportó largas horas de debugging, SIGSEGV inesperados y noches de café infinito. ¡Gracias por la paciencia y la locura compartida! 🎉
¡Siéntete libre de mejorar Minishell! Puedes hacer un fork y enviar un pull request con mejoras en la funcionalidad o la estructura del código.