En este momento estás viendo El entorno del SHELL

El entorno del SHELL

El Shell

Vamos a ver lo que es el entorno del shell, como funciona, que tipos hay y su estructura. Veremos la entrada, la salida y el error estandar.

Introducción

Cuando un usuario inicia una sesión en un sistema UNIX, este crea, para ese usuario, una shell propia, que será el interprete de las órdenes entre usuario y máquina. El shell funciona de la siguiente manera.

  • Muestra en la pantalla el prompt indicando que esta listo para recibir comandos
  • El shell analiza la orden cuando el usuario la introduce.
  • Si encuentra algún error devuelve al usuario un mensaje.
  • Si el comando está escrito correctamente, localiza en disco el programa a ejecutar y pide al Sistema Operativo que lo ejecute, pasándole a éste el control.
  • Cuando finaliza la ejecución, el control vuelve al shell, que mostrará el prompt esperando un nuevo comando.

El usuario introduce una orden desde el teclado, el shell interpreta el comando y requiere del S.O. que ejecute el programa. Es decir, el shell interactúa con el usuario y con el S.O.

Los sistemas UNIX soportan varios shell diferentes, como son el Bourn Shell, el Korn Shell, el C Shell y el B Shell. Para saber el shell en el que nos encontramos, ejecutaremos:

echo $SHELL 
Si nos devuelveEl shell es
/bin/shBourne Shell (Se encuentra en todos los sistemas UNIX)
/bin/kshKorn Shell (SCO UNIX)
/bin/cshC Shell (Se encuentra en todos los sistemas UNIX)
/bin/bashB Shell (Linux)

Estructura de las órdenes del Shell

En la sintaxis de las órdenes de sistemas UNIX, primero encontramos la orden (comando), seguido de las opciones de este y finalmente el argumento. Por ejemplo:

ls -la fichero
  • ls es la orden (listar el contenido de un directorio)
  • -l es la primera opción que indica un listado largo (con datos de permisos,propietario, tamaño, etc..)
  • -a es la segunda opción que indica que se muestren los ficheros ocultos.
  • fichero es el argumento al que aplicará la orden y las opciones.(nombre del fichero a listar).

Vamos a ver como funciona esta interacción que hemos definido.

Entrada, salida y error estándar

Un programa (los comandos son programas) es un fichero escrito en algún lenguaje de programación que se almacena en disco. Cuando ejecutamos este programa, el sistema copia el fichero a la RAM creando un proceso.

Cuando ejecutamos un programa y creamos un proceso, el sistema, abre tres ficheros para este proceso que son: la entrada estandar, la salida estandar y el error estandar.

  • La entrada estándar (stdin) es el medio por el que el proceso espera leer la entrada que, por defecto, es el teclado.
  • La salida estándar (stdout) es el lugar por el que el proceso escribe su salida; por defecto, la salida es por la pantalla.
  • El error estándar (stderr) es el lugar donde los procesos escriben los mensajes de error generados, que también es la pantalla.

Las órdenes están creadas para leer una secuencia de caracteres de entrada y, normalmente, la entrada estandar está asociada al teclado. Pero podemos redirigir la entrada estandar a un fichero, de esta manera, el proceso leerá los datos del fichero indicado. Esto se hace mediante el caracter «<« . Veámoslo con un ejemplo:

write javier <saludo

Con esta orden mandaríamos un mensaje a «javier» que sería el contenido del fichero «saludo».

Si introducimos un comando sin argumentos, este esperará la entrada de caracteres por la entrada estandar (teclado).

Cuando utilizamos el teclado como entrada estandar, es necesario indicarle al sistema cuando se termina la entrada, para ello, la marca de fin de fichero, en Unix, se establece con ctr-d.

Otro ejemplo: si ejecutamos el comando «cat» sin opciones y con el caracter «-«, le estamos diciendo que debe tomar la entrada estandar en ese punto.

cat saludo - saludo1

Así pues concatenará el contenido del fichero «saludo», los caracteres introducidos por el teclado hasta el ctrl-d, y el contenido del fichero «saludo1».

También podemos redireccionar la entrada estandar para que lea los datos asociados al segundo argumento de un fichero, en vez de obtenerlos del teclado.

cat saludo - saludo1 <saludo3

Concatenará el contenido de los ficheros saludo, saludo3 y saludo1. (En ese orden).

Cuando redireccionamos la entrada desde un fichero, el flujo de los datos de entrada, salida y error estandar es como sigue:

Redirección de la salida estándar a un fichero

Al igual que podemos establecer la entrada desde un fichero, también podemos redireccionar la salida a un fichero. En vez de mostrar la salida por pantalla (salida estandar), la redigirá a un fichero que establezcamos como argumento. Lo haremos con el caracter «>». Si el fichero al que lo redirigimos no existe lo creará, y si existe, lo sobreescribirá. Por ejemplo:

ls -la > fichero

Esto creará un listado que guardará en «fichero» en vez de mostrarlo por pantalla. O con el ejemplo anterior…

cat saludo saludo1 >saludo_completo

Concatenará el contenido de «saludo» y «saludo1», y lo guardará en el fichero «saludo_completo», en vez de mostrarlo por pantalla.

Si lo que queremos es añadir la salida estandar a un fichero ya existente tenemos que usar el caracter doble «>>». Así añade contenido al ya existente sin borrar lo que había.

ls -la >>fichero

Nos creará un listado del directorio actual y lo añadirá al «fichero», que habíamos creado antes, pero conservando los datos anteriores.

Cuando redireccionamos la salida a un fichero, el flujo de los datos de entrada, salida y error estandar es como sigue:

Redirección simultánea de la salida y entrada estándar

Podemos redireccionar la entrada y salida de un proceso simultaneamente.

cat -<fichero >ficheroCopia

Tomara los datos de «fichero» (entrada) y lo guardará en «ficheroCopia», solo nos confirmará por pantalla el error, si lo hay.

Cuando redireccionamos la salida y la entrada a un fichero, el flujo de los datos de entrada, salida y error estandar es como sigue:

Redirección del error estándar

Hemos visto la entrada y salida estandar, pero el sistema nos proporciona un tercer canal que es el error estandar. Normalmente la salida del error estandar es por pantalla. Así, haciendo un «cat» sobre un fichero que no existe,

cat nofichero

Pero, como en el caso de la entrada y salida estandar, también podemos redirigir el error estandar. Para ello debemos utilizar el operador «2>» o «2>>», según las mismas opciones vistas antes, para crear, sobreescribir o añadir contenido. Veámoslo…

cat nofichero 2>error

La salida de error del comando la guarda en el fichero «error». Y si visualizamos el contenido de «error»

En póximos posts veremos tuberías, variables, el sistema de ficheros y algunos comandos.

Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.

Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.

Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.