Parrilla de corrección para la práctica del WINSH Grupo: Nota: Ej. 1.­ Señales: El proceso winsh no debe terminar si se pulsa Ctrl­C. Ej. 2.­ Comando cd: Deben funcionar correctamente órdenes de los siguientes tipos, informando de posibles errores en su caso (directorios no existentes, p.e.): cd cd erroneo ... cd directorio cd dir* cd ..\..\..\ cd C:\ 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 winsh, el tiempo que lleva activo el winsh 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: cmd /c dir | sort cmd /c type fichero.txt | sort | sort /r cmd /c type fichero.txt | sort | sort /r | more cmd /c dir C:\Windows | sort ... Ej. 5.­ Comodines: Deben funcionar correctamente órdenes como las siguientes: cmd /c dir *.c cmd /c echo * cmd /c dir fichero.? ... cmd /c dir ..\a* Ej. 6.­ Separadores de comandos && y ||: Deben funcionar correctamente órdenes como las siguientes: false.exe || cmd /c echo hola true.exe || cmd /c echo hola false.exe && cmd /c echo hola true.exe && cmd /c echo hola cmd /c dir existe.c || echo hola cmd /c echo $? cmd /c dir noexiste.c || echo hola ... Siendo true.exe y false.exe programas escritos para la prueba, que devolviesen 0 y 1, respectivamente. $? debe tener el mismo comportamiento que en el bash de linux. Ej. 7.­ Ejecución de guiones shell: Un fichero denominado guion.bat cuyo contenido es el siguiente: $ 3 01:42 host21:alumno $ cmd /c type guion.bat cmd /c dir | sort cmd /c dir *.c false.exe && cmd /c echo hola bgproc $ 3 01:42 host21:alumno $ guion.bat 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.bat no existe debe aparecer el mensaje “Comando no encontrado”. Ej. 8.­ Completar órdenes mediante el uso del tabulador: Si introducimos win y pulsamos dos veces el tabulador, debe producirse un pitido y mostrar en pantalla los posibles comandos ejecutables que se encuentren en algún directorio del path (consultar variable %PATH%): $ 3 01:42 host21:alumno $ win TAB TAB winchat.exe winspool.exe winhlp32.exe winver.exe winmine.exe ... winmsd.exe 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 $ \Dir[TAB] (Se sustituye por:) $ 3 01:42 host21:alumno $ \Directorio\ (suponiendo que exista) $ 3 01:42 host21:alumno $ \Directorio\o[TAB] (Se sustituye por:) $ 3 01:42 host21:alumno $ \Directorio\otro\ Por ejemplo, si tenemos dos directorios como: \Directorio\otro1\ \Directorio\otro2\ Si introducimos: $ 3 01:42 host21:alumno $ \Directorio\o[TAB] (Se sustituye por:) $ 3 01:42 host21:alumno $ \Directorio\otro Si volvemos a pulsar el tabulador en ese momento: $ 3 01:42 host21:alumno $ \Directorio\otro[TAB] (Aparece:) \Directorio\otro1 \Directorio\otro2 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 notepad se le puso en un momento dado una alarma a la que quedan aún 18 segundos para expirar): COMANDO notepad calc ... PID 1090 1098 ... LANZAMIENTO 06/03/06 18:37:54 06/03/06 18:38:25 ... ACTIVO 137 segs. 106 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. Si el PID no existe, debe mostrar un mensaje de error, indicando que el proceso con el PID indicado no se encuentra en la lista de procesos en segundo plano. Ej. 11.­ Orden smshkill: Por ejemplo, si el proceso con PID 1090 existiese y hubiese sido lanzado en segundo plano desde el winsh: smshkill 1090 (Debería matarse a dicho proceso). Si, por el contrario, dicho proceso no existiese, o no hubiese sido lanzado en segundo plano desde el winsh: smshkill 1090 (Debería mostrarse un mensaje de error apropiado). Ej. 12.­ Exit: Debe acabar el winsh, 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. El proceso con PID=1100 ha finalizado al terminar el shell. ... Aportaciones voluntarias Comentarios