Este proyecto es una implementación de un intérprete de comandos (shell) funcional para sistemas operativos Linux. Fue desarrollado como parte del curso Sistemas Operativos y tiene como objetivo replicar las funcionalidades básicas de un shell estándar con características adicionales únicas.
- Ejecución de comandos básicos: Soporte para ejecutar comandos con o sin argumentos.
- Redirección de entrada y salida:
- Entrada:
cmd < file - Salida:
cmd > file
- Entrada:
- Ejecución en segundo plano:
cmd &permite ejecutar comandos de manera asíncrona. - Cambio de directorio (
cd): Built-in para cambiar el directorio de trabajo. - Variables de entorno:
- Asignación:
x=y - Expansión:
$xse reemplaza con el valor dex. - Notificación de errores si la variable no existe.
- Asignación:
- Manejo de Here Documents: Soporte para
HERE{para capturar múltiples líneas de entrada hasta}. - Globbing: Expansión de patrones como
*.c. - Comandos avanzados:
ifok: Ejecuta un comando solo si el anterior fue exitoso.ifnot: Ejecuta un comando solo si el anterior falló.
- Variable de estado
result: Almacena el código de salida del último comando ejecutado.
- Clona este repositorio:
git clone https://github.com/aMonteSl/Shell.git cd tu-repo - Compila el código:
gcc -o shell shell.c
- Ejecuta la shell:
./shell
ls -l
echo "Hola, mundo"cat < input.txt > output.txtsleep 5 &PATH=/usr/bin
echo $PATHwc -l HERE{
línea 1
línea 2
}test -e /tmp
ifok echo "El archivo existe"
ifnot echo "El archivo no existe"- Here Documents: Captura múltiples líneas como entrada estándar.
- Estado del último comando: La variable
resultguarda el código de salida. - Expansión de patrones (globbing): Soporte para
*.co*test.
shell.c: Código fuente de la shell.README.md: Documentación del proyecto.
- Esta shell no utiliza funciones como
system()oexecvp()que gestionan automáticamente la variablePATH. La búsqueda de ejecutables en el sistema se realiza manualmente. - El proyecto está diseñado para ser extensible y fácilmente integrable en sistemas UNIX.
Este proyecto fue desarrollado por Adrián Montes Linares como parte del curso de Sistemas Operativos. Para más información, puedes contactarme en LinkedIn.
¡Gracias por explorar este proyecto! Si te resulta útil o interesante, no dudes en darle una estrella ⭐ en GitHub.