Redirecciones en la shell: fundamentos teóricos

Por lo general, queremos ver el resultado de los comandos por pantalla. Pero también puede ser útil guardar esa información en un archivo para verla o procesarla luego. De la misma manera, casi siempre suministraremos argumentos a dichos comandos a través del teclado. Sin embargo, existe la posibilidad de hacerlo desde un archivo existente. En ambos casos recurriremos a redirecciones en la shell, tema que presentaremos en este post y continuaremos en el próximo.

Redirecciones en la shell

Bash, como las demás shells, utiliza canales de E/S (Entrada/Salida) para leer y escribir datos. Como lo mencionamos más arriba, el canal de entrada por defecto es el teclado, y el canal de salida es la pantalla. Los errores constituyen un canal especial y por defecto son enviados a la pantalla (aunque esto puede cambiarse).

Las redirecciones más comunes son las siguientes:

  • De salida: nos permiten enviar el resultado de un comando hacia un archivo. Si hubiere errores, también podemos indicar que se registren.
  • De entrada hacen que sea posible utilizar el contenido de un archivo como argumento para un comando.
  • Las tuberías se utilizan para enviar el resultado de un comando como entrada para otro.

Redirecciones de salida

Por ejemplo, en el caso de que /var/log/httpd exista pero /var/log/alumno no:

ls -l /var/log/httpd /var/log/alumno > prueba1.txt

se guardará el resultado de ls -l /var/log/httpd en prueba1.txt pero se mostrará el error relacionado con /var/log/alumno por pantalla, como vemos en la Fig. 1:

Redirecciones en la shell: ejemplo de redirección de salida
Figura 1 – Redirecciones en la shell: ejemplo de redirección de salida

Si deseamos también redireccionar el error a este archivo deberemos hacer

ls -l /var/log/httpd /var/log/alumno > prueba1.txt 2>&1

como también observamos en la Fig. 1. En uno u otro caso, la shell lee las redirecciones de derecha a izquierda. Por eso, en este último ejemplo enviamos el canal 2 (stderr o error estándar) hacia el número 1 (stdout, o salida estándar). Como consecuencia, los mensajes de error pasarán por la salida estándar primero y esta última se redirigirá hacia prueba1.txt para finalizar.

Para agregar mediante una redirección de salida más contenido a un archivo ya existente debemos utilizar el operador >> en vez de >. A diferencia del primero, este último sobreescribirá los contenidos del archivo.

En el próximo post hablaremos sobre estos dos últimos tipos de redirecciones. ¡Suscribite al blog para no perdértelo!

Te invitamos a conocer la propuesta completa de Carrera Linux Argentina para convertirte en un experto y completo sysadmin desde cero. En nuestro sitio web Aprender Linux podrás encontrar más detalles y contactarnos si te surgen preguntas o dudas. ¡Esperamos tu consulta!