Minishell es un intérprete de comandos diseñado para ejecutar mandatos en foreground y background, soportando pipes, redirecciones y mandatos internos. Esta práctica tiene como objetivo principal la implementación de un minishell funcional que cumpla con todas las especificaciones de manejo de procesos, señales y redirecciones.
- Ejecución de mandatos con uno o varios argumentos.
- Soporte para pipes (
|) entre múltiples mandatos. - Redirecciones:
- Entrada:
< fichero(solo en el primer mandato de un pipe) - Salida:
> fichero(solo en el último mandato de un pipe) - Error:
>& fichero(solo en el último mandato de un pipe)
- Entrada:
- Ejecución en background usando
&mostrando el PID del proceso sin bloquear el prompt. - Manejo de señales:
SIGINT(Ctrl-C): no interrumpe el minishell ni procesos en background.SIGTSTP(Ctrl-Z): detiene los procesos en foreground sin parar el minishell.
- Mandatos internos:
cd: cambio de directorio con rutas absolutas o relativas, y acceso alHOME.exit: termina el minishell de forma ordenada.umask: establece o muestra la máscara de permisos para nuevos ficheros.jobs: lista los trabajos en background o detenidos porSIGTSTP.bg: reanuda la ejecución de trabajos detenidos en background.
| Objetivo | Descripción | Puntos |
|---|---|---|
| 1 | Ejecutar un mandato en foreground con 0 o más argumentos | 0.5 |
| 2 | Ejecutar un mandato en foreground con redirecciones de entrada y salida | 1 |
| 3 | Ejecutar dos mandatos en foreground con pipe y posibles redirecciones | 1 |
| 4 | Ejecutar más de dos mandatos en foreground con pipe y redirecciones | 2.5 |
| 5 | Ejecutar el mandato interno cd |
0.5 |
| 6 | Ejecutar mandatos en foreground y background con más de dos comandos, manejando jobs y bg |
2 |
| 7 | Manejar señales SIGINT y SIGTSTP correctamente |
1 |
| 8 | Ejecutar el mandato interno exit |
0.5 |
| 9 | Ejecutar el mandato interno umask |
1 |
Nota: Todos los objetivos se deben cumplir con un único programa genérico. No se deben crear versiones separadas para cada objetivo.
- Compilar el programa (si aplica según tu implementación):
gcc -Wall -Wextra myshell.c libparser.a -o mishell -static- Ejecutar el minishell desde la terminal:
./minishell