Parrilla de corrección para la práctica del SMALLSH Grupo: Nota: Ej. 1.- Señales: Ni el proceso smallsh, ni los procesos en 2º plano deben terminar si se les envía SIGINT (Ctrl-C) o SIGQUIT (Ctrl-\). $ grep hola con Ctrl-C o Ctrl-Alt-\ debería regresar a smallsh $ ls -lR con Ctrl-C o Ctrl-Alt-\ debería regresar a smallsh $ ls -lR & Ni Ctrl-C ni Ctrl-Alt-\ debería afectar a smallsh. Hay que esperar a que terminen las ordenes Ej. 2.- Comando cd: Deben funcionar correctamente órdenes de los siguientes tipos, informando de posibles errores en su caso (directorios no existentes, o sin permisos, p.e.): cd cd erróneo cd directorio cd dir* cd ../../../ ... Ej. 3.- Prompt: Debe imprimirse correctamente, sin perder ningún carácter, y con el número de procesos lanzados en segundo plano desde el smallsh, el tiempo que lleva activo el smallsh desde que se inició, el nombre del host y el directorio actual correctos. Un ejemplo de formato correcto sería: $ 3 01:42 host21:alumno $ Ej. 4.- Tuberías: Deben funcionar correctamente órdenes como las siguientes: ls -l | sort ls -R /usr/bin | cat procline.c | ls -l | head -10 cat procline.c | ... sort grep narg | cut -c1-4 | tail -5 | cut -c5-10 sort | uniq | tee fichero | less Ej. 5.- Comodines: Deben funcionar correctamente órdenes como las siguientes: ls *.c ls *.{c,h} echo * ls a*b*c ls ../a* ls ../../b*.c ls *.? ... Ej. 6.- Separadores de comandos && y ||: Deben funcionar correctamente órdenes como las siguientes: false || echo hola false && echo hola ls existe.c || echo hola echo $? true || echo hola true && echo hola ls noexiste.c || echo hola ... (Ésta última orden debe funcionar exactamente igual que en el bash, mostrando el valor devuelto por la última orden ejecutada en primer plano). Ej. 7.- Ejecución de guiones shell: Un fichero denominado guion cuyo contenido es el siguiente: $ 3 01:42 host21:alumno $ cat guion ls -l | sort ls *.{c,h} false && echo hola bgproc $ 3 01:42 host21:alumno $ guion Se deben ejecutar los cuatro comandos anteriores con el mismo resultado que se produce si se ejecutan sin formar parte del archivo los comandos correspondientes. Si el fichero guion no existe debe aparecer el mensaje “Comando no encontrado”. Ej. 8.- Completar órdenes mediante el uso del tabulador: Si introducimos ps y pulsamos dos veces el tabulador, debe producirse un pitido y mostrar en pantalla los posibles comandos: $ 3 01:42 host21:alumno $ ps TAB TAB ps ps2ascii ps2epsi ps2frag ps2pdf ps2pdf12 ps2pdf13 ps2pdf14 ps2pdfwr ps2pk ps2ps psed psfaddtable psfgettable psfstriptable psfxtable psidtopgm pslatex psmandup psset pstatus pstopnm pstree pstree.x11 pstruct pswrap Si introducimos una ruta absoluta o relativa se deben completar los nombres de los directorios que el usuario introduce. Por ejemplo: $ 3 01:42 host21:alumno $ /hom TAB (Se sustituye por:) $ 3 01:42 host21:alumno $ /home/ $ 3 01:42 host21:alumno $ /home/alum TAB (Se sustituye por:) $ 3 01:42 host21:alumno $ /home/alumno/ Por ejemplo, si tenemos dos directorios como: /home/alumno1/ /home/alumno2/ Si introducimos: $ 3 01:42 host21:alumno $ /home/alum TAB (Se sustituye por:) $ 3 01:42 host21:alumno $ /home/alumno Si volvemos a pulsar el tabulador en ese momento: $ 3 01:42 host21:alumno $ /home/alumno TAB (Se sustituye por:) /home/alumno1/ /home/alumno2/ Ej. 9.- Orden bgproc: Una vez lanzados una serie de procesos en segundo plano, la ejecución de este comando debería mostrar una información análoga a la siguiente, por ejemplo (suponiendo que la hora actual sean las 18:40:11, y que al comando nedit se le puso en un momento dado una alarma a la que quedan aún 18 segundos para expirar): COMANDO nedit kwrite ... konqueror PID 1090 1098 ... 1104 LANZAMIENTO 06/03/06 18:37:54 06/03/06 18:38:25 ... 06/03/06 18:40:01 ACTIVO 137 segs. 106 segs. ... 10 segs. RESTANTE 18 segs. ... - Cuando un proceso en segundo plano termine (de forma normal o por alarma), debe mostrar un mensaje similar al siguiente: El proceso PID=1104 ha finalizado normalmente, código retorno=0. o bien El proceso con PID=1090 ha finalizado al expirar su alarma. Ej. 10.- Orden alarma: Al menos, debe funcionar para como mínimo un proceso en segundo plano. Debe afectar a la información que aparece al ejecutar un bgproc (ver punto anterior), y debe tener el efecto de terminar el proceso indicado por su PID en caso de que expire su temporizador. Ej. 11.- Orden smshkill: Deben funcionar, como mínimo, órdenes como las siguientes: smshkill -14 1090 (Envía una señal de alarma al proceso en 2º plano con pid=1090) smshkill -9 1098 (Envía una señal de terminación al proceso en 2º plano con pid=1098) smshkill -3 1104 (El proceso no debe terminar porque debe ignorar la señal SIGQUIT) Ej. 12.- Exit: Debe acabar el smallsh, pero previamente todos los procesos pendientes (en segundo plano) deben también terminar, mostrando un mensaje similar al del ejercicio 9: El proceso con PID=1098 ha finalizado al terminar el shell. Aportaciones voluntarias Comentarios