Repositorio para la entrega del 1mer proyecto de la asignatura Sistemas Computacionales y Redes, correspondientes al curso 2025.
El objetivo del proyecto es hacer un shell que simule los shells del sistema operativo linux.
Las funcionalidades son las siguientes:
- Al ejecutar el programa este debe imprimir un prompt (ejemplo "$ ")
- Ejecutar comandos e imprimir su salida
- Poder ejecutar el comando
cd(y que cambie de directorio) - Redirigir entrada y salida estándar de comandos hacia/desde ficheros con
>,<,>> - Redirigir la salida estándar de un comando hacia la entrada de otro con un pipe
| - Una vez terminado el comando previo, se debe mostrar el prompt nuevamente.
- Solamente habrá un espacio entre cada uno de los tokens de la entrada
- comandos
- parámetros
- operadores de redirección (
>,|, etc.)
y hasta aquí tienen 3 puntos en el proyecto
- Implementar más de una tubería (1pt adicional)
- Implementar el operador
&y tener procesos en el background (1pt adicional)
- jobs => listar todos los procesos que están corriendo en el background
- fg => envía el proceso hacia el foreground
- NOTA: aquí tiene que funcionar algo como
command1 < file1 | command2 > file2 &
- Permitir cualquier cantidad de espacios o no entre los comandos y parámetros (0.5pt adicional)
- Implementar un historial de comandos (un comando
history) que permita imprimir enumeradamente los últimos 50 comandos ejecutados en la consola (0.5pt adicional). Un comando no va a parar al historial si:
- Se repite el último comando.
- El comando empieza con espacio.
- Implementar Re-utilización de comandos.
-
El comando history muestra la secuencia de comandos, con un número a su izquierda. Con este número es posible llamar de nuevo el comando utilizando el caracter admiración "!" (comando
![número]). El último comando se repite con doble admiración "!!" (0.5pt adicional) -
Ejecutar el último comando (
command) que se ha ejecutado escribiendo -
NOTA: Por ejemplo history retorna: 1 history 2 ls 3 cd /dev 4 ls 5 rm *.bak 6 cd /etc 7 history
De manera que si hacemos:
!5ejecuta "rm *.bak"!!ejecuta "history"!cdejecuta "cd /etc"
Fecha de entrega: Domingo 20 de abril 11:59:59 PM. Mediante un issue o PR en el presente repositorio.