codestrange / shellout

Machine Programming II Project for the 2018-2019 course of the Computer Science degree at the University of Havana, Cuba.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Orientacion del Proyecto

El objetivo del proyecto es hacer un shell que simule los shells del sistema operativo linux.

Las funcionalidades son las siguientes:

  1. Al ejecutar el programa este debe imprimir un prompt (ejemplo "$ ")
  2. Ejecutar comandos e imprimir su salida
  3. Poder ejecutar el comando cd (y que cambie de directorio)
  4. Redirigir entrada y salida estándar de comandos hacia/desde ficheros con >, <, >>
  5. Redirigir la salida estándar de un comando hacia la entrada de otro con un pipe |
  6. Una vez terminado el comando previo, se debe mostrar el prompt nuevamente.
  7. Solamente habrá un espacio entre cada uno de los tokens de la entrada
    • comandos
    • parámetros
    • operadores de redirección (>, |, etc.)

Hasta aquí tienen 3 puntos en el proyecto

  1. Implementar más de una tubería (1pt adicional)
  2. Implementar el operador & y tener procesos en el background (1pt adicional)
    • jobs => listar todos los procesos que están corriendo en el background
    • fg <pid> => envía el proceso <pid> hacia el foreground
    • NOTA: aquí tiene que funcionar algo como command1 < file1 | command2 > file2 &
  3. Permitir cualquier cantidad de espacios o no entre los comandos y parámetros (0.5pt adicional)
  4. 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.
  5. 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 ![command] (0.5pt adicional)
    • 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:
      • !5 ejecuta "rm *.bak"
      • !! ejecuta "history"
      • !cd ejecuta "cd /etc"

Sobre la Entrega

Fecha de entrega: Jueves 8 de noviembre

About

Machine Programming II Project for the 2018-2019 course of the Computer Science degree at the University of Havana, Cuba.


Languages

Language:C 99.3%Language:Makefile 0.7%