Un shell en UNIX es un intérprete de comandos.
El Unix soporta dos tipos diferentes de shells, el Bourne shell y el C shell. Ambos shells tienen la misma finalidad, pero por diferentes caminos. El C shell es realmente una ampliación del Bournell shell.
En este capítulo veremos por lo tanto una descripción del C shell. El Cshell posee un lenguaje de programación similar al lenguaje de programación C, de ahí el nombre de C shell.
Las capacidades básicas del C shell son :
Crear notaciones taquigráficas para un comando o una serie de comandos.
Ejecutar varios trabajos simultáneamente, con o sin nuestra intervención.
Parar un trabajo y empezar de nuevo.
Ejecutar comandos usados previamente.
Personalizar el ambiente a las necesidades personales.
Escribir programas a nivel de comandos, para realizar cualquier tipo de tarea.
Los ordenadores CONVEX tienen sistema multitarea, es decir, se puede utilizar el ordenador para trabajar en uno o más procesos o tareas al mismo tiempo.
Un comando puede ejecutarse en foreground o en background.
Cuando se ejecuta un trabajo en foreground, el prompt del sistema no reaparece hasta que el comando ha terminado de ejecutarse; sin embargo, cuando se ejecuta un trabajo en background reaparecerá el prompt del sistema aunque no se haya terminado de ejecutar el comando.
Para correr un trabajo en background, hay que poner un ampersand (&) al final de la línea de comando, justo antes de presionar <return>.
1.1. PASAR UN TRABAJO DE FOREGROUND A BACKGROUND: COMANDO bg
Hay veces que se está ejecutando un programa en foreground y resulta que es demasiado largo, por lo que nos interesa seguir trabajando. Afortunadamente el UNIX permite pasar un trabajo de foreground a background.
Para pasar un trabajo que se está corriendo en foreground a background, se hace en 2 pasos:
Se suspende el trabajo tecleando y entonces aparecerá el prompt del sistema.
Se manda ejecutar el trabajo en background con el comando bg. La sintaxis de este comando es simplemente:
bg |
---|
1.2. COMANDO jobs
El comando jobs lista por pantalla todos los trabajos que se han lanzado en background. Su sintaxis es:
jobs |
---|
La salida de este comando es la siguiente:
[1] + Running bmdp 2d epa.2d1 salepa.2d1 [2] - Running bmdp 2d epa.2d2 salepa.2d2
1ª columna Corresponde al número de orden en que se van a ejecutar los comandos.
2ª columna Puede estar en blanco, o contener un signo más (+), o un signo menos (-):
3ª columna Indica si el trabajo está corriéndose en background (Running) o se ha parado (Stopped).
4ª columna Contiene el nombre del comando que se está corriendo en background o que está parado.
1.3. PASAR UN TRABAJO DE BACKGROUND A FOREGROUND: COMANDO fg
Algunas veces se necesita pasar un trabajo que se está corriendo en background a foreground para poder utilizar el programa. Para ello se utiliza el comando fg cuyo formato es:
fg [% número trabajo] |
número trabajo | Es el número del trabajo que se quiere pasar a foreground.
Este número es el que apareceen la 1ª columna de la salida del comando jobs. Si no se especifica ningún número, se pasará a foreground el trabajo que aparezca con un signo - , en la salida del comando jobs. |
---|
El c shell permite definir aliases. Un alias es un nemotécnico que representa a un comando o a un grupo de comandos.
Para definir un alias se utiliza el comando alias, cuya sintaxis es:
alias nemotécnico comando(s) |
comando(s) | Comando o comandos, que va a contener el alias que se está definiendo. Si se especifican
varios comandos, éstos deberán de ir separados por un punto y coma (;) o por pipes (|).
Si el comando especificado contiene algún espacio en blanco, se debe de englobar entre comillas simples ('). |
---|
Cuando se define un alias utilizando el comando anterior, el nemotécnico tiene efecto hasta que se hace log out (^D), es decir, cada alias que se define es válido para la sesión en la que estamos. Por lo tanto, si se quiere que los alias que se definan se mantengan en otras sesiones, éstos se deben de incluir en el fichero .cshrc.
Por ejemplo:
alias DIR ls -a
Para saber qué aliases se tienen definidos, se pone simplemente:
alias |
---|
entonces aparecerá en la pantalla una lista con todos los aliases que están definidos.
En el ejemplo siguiente se define un alias que ordena y pagina la salida del comando who.
alias who 'who | sort | more'
Para cancelar un alias se utiliza el comando unalias, cuya sintaxis es:
unalias nemotécnico |
El C shell posee una característica llamada " utilidad history", que recuerda los últimos comandos ejecutados; normalmente recuerda los 20 últimos. Esta utilidad permite además, repetir cualquier comando o modificarlo antes de ejecutarlo de nuevo.
3.1. COMANDO history
Para visualizar la lista de comandos previamente ejecutados se invoca la utilidad history poniendo simplemente:
history |
---|
y el sistema UNIX responde dando una lista de los comandos que se han ejecutado desde que se hizo log in, precedidos por un número que se llama identificador de comando. Este identificador es el que permite repetir la ejecución del comando deseado. Para hacer esto se pone:
! nº identificador |
---|
El signo ! indica al shell que debe de buscar el comando en la lista de history; y el nº identificador indica que debe de ejecutar el comando identificado por ese número.
Se puede especificar el nº de los últimos comandos que queramos visualizar, así como que la lista aparezca en orden inverso, poniendo:
history [-r][n] |
-r | Origina que la lista de comandos que se han ejecutado aparezca en orden inverso. |
---|---|
n | Número de comandos que se desean visualizar. |
En la figura siguiente se presenta un ejemplo de la utilidad history:
__________________________ 6 /mnt/carmen % history 1 pwd 2 ls -s 3 cd reportaje 4 vi semana12 5 lpr semana12 6 history 7 /mnt/carmen % !5 lpr semana12 8 /mnt/carmen % __________________________
Figura 1.
Este método permite repetir un comando, pero es necesario visualizar la lista que origina history para conocer el nº identificador del comando.
Existen otras 2 formas de localizar el comando:
especificando la posición relativa
especificando el nombre del comando.
3.2. REPETICION DE UN COMANDO ESPECIFICANDO SU POSICION RELATIVA
Supongamos que queremos repetir un comnado que ya habíamos ejecutado con anterioridad, n veces antes que el último comando, entonces pondríamos:
!-n |
---|
En el ejemplo de la figura 1. si quisiéramos volver a repetir el comando lpr semana12 , habría que poner:
!-3
y se ejecutará el tercer comando que precede al último.
El C shell posee un comando especial:
!! |
---|
que repite el último comando ejecutado; es decir, sería lo mismo que !-1.
3.3. REPETICION DE UN COMANDO ESPECIFICANDO SU NOMBRE
Para repetir un comando se puede utilizar, todo o parte, del nombre de un comando, de este modo no es necesario acordarse del nº identificador o del la posición relativa del comando.
Veamos, de acuerdo con el ejemplo de la figura 1., las distintas posibilidades que hay para repetir la ejecución de un comando especificando su nombre o parte del nombre:
Especificando el nombre completo del comando :
!nombre comando |
---|
En el ejemplo, si ponemos:
!vi
se ejecutará el comando vi semana12
Especificando las primeras letras del comando (sólo es necesario la primera) :
!caracter1 caracter2 ... |
---|
En el ejemplo, si ponemos:
!l
se ejecutará el último comando que empiece por l; es decir, lpr semana12
Especificando alguna letra contenida en el nombre del comando :
!?caracter? |
---|
En el ejemplo, si ponemos:
!?s?
se ejecutará el comando ls -s
3.4. MODIFICACION DE UN COMANDO EJECUTADO PREVIAMENTE
El C shell permite modificar o corregir un error que se haya cometido en un comando ejecutado anteriormente. Para hacer esto se pondría:
^ string antiguo ^ string nuevo |
---|
string antiguo | contiene el error |
---|---|
string nuevo | contiene los caracteres por los que se va a sustituir el string antiguo. |
[Indice]