Redirección de Entrada y Salida en Shell Scripting

Conceptos Fundamentales de Redirección

Cada proceso en un sistema operativo tiene asociaods por defecto tres descriptores de archivo: entrada estándar (stdin), salida estándar (stdout) y error estándar (stderr).

La redirección nos permite dirigir la salida estándar y la salida de error de un comando hacia un archivo. De manera inversa, podemos utilizar el contenido de un archivo como entrada estándar para un proceso, simuladno la entrada desde un teclado.

Símbolos de Redirección

  • Entrada: <
  • Salida (sobrescritura): >
  • Salida (agregar): >>
  • Error estándar: 2>
  • Salida estándar y error estándar: &>

Redirección de Entrada

El símbolo < se utiliza para que un archivo sea leído como entrada estándar de un comando. Por ejemplo:

[user@host ~]$ echo "Datos de entrada" > input.txt
[user@host ~]$ read linea < input.txt
[user@host ~]$ echo $linea
Datos de entrada

En este caso, el contenido de input.txt se asigna a la variable linea mediante el comando read.

Redirección de Salida

Redirección con > (Sobrescritura)

Este operador dirige la salida estándar de un comando a un archivo. Si el archivo existe, su contenido será sobrescrito. Si no existe, se creará.

[user@host ~]$ echo "Primera línea" > output.txt
[user@host ~]$ cat output.txt
Primera línea
[user@host ~]$ echo "Segunda línea" > output.txt
[user@host ~]$ cat output.txt
Segunda línea

Redirección con >> (Agregar)

Similar a >, pero en lugar de sobrescribir, el contenido se agrega al final del archivo. Si el archivo no existe, se creará.

[user@host ~]$ echo "Línea inicial" >> output.txt
[user@host ~]$ cat output.txt
Línea inicial
[user@host ~]$ echo "Línea añadida" >> output.txt
[user@host ~]$ cat output.txt
Línea inicial
Línea añadida

Redirección de Error Estándar con 2>

El descriptor de archivo 2 representa el error estándar. Este operador redirige solo los mensajes de error a un archivo especificado.

[user@host ~]$ comando_inexistente 2> error.log
[user@host ~]$ cat error.log
bash: comando_inexistente: command not found

Si intentamos redirigir la salida de un comando inexistente sin 2>, el error se mostrará en la terminal.

Redirección Combinada con &>

Este operador redirige tanto la salida estándar como el error estándar a un único archivo.

[user@host ~]$ comando_inexistente &> all_output.log
[user@host ~]$ cat all_output.log
bash: comando_inexistente: command not found
[user@host ~]$ free -m &> system_info.log
[user@host ~]$ cat system_info.log
             total       used       free     shared    buffers     cached
Mem:           980        918         62          0         71        547
-/+ buffers/cache:        299        681
Swap:         1983          0       1983

Uso Combinado de Redirección

La entrada y salida pueden combinarse, lo cual es útil en scripts para generar acrhivos de configuración dinámicamente. Un ejemplo común es usar cat con redirección y un delimitador:

#!/bin/bash
cat > nuevo_script.sh << EOF
echo "Este es un script generado."
EOF

Este script crea un archivo llamado nuevo_script.sh. El contenido entre << EOF y la línea EOF se escribe en nuevo_script.sh.

Ejecución del script:

[user@host ~]$ chmod +x generar_script.sh
[user@host ~]$ ./generar_script.sh
[user@host ~]$ cat nuevo_script.sh
echo "Este es un script generado."
[user@host ~]$ ./nuevo_script.sh
Este es un script generado.

Consideraciones Finales

Al usar redirección de salida, recuerde diferenciar entre sobrescritura (>) y agregado (>>). Es prudente evitar la sobrescritura de archivos de configuración críticos del sistema sin antes hacer copias de seguridad. La combinación de redirección de entrada y salida es una herramienta poderosa para la automatización y la generación de archivos en scripts de shell.

Etiquetas: shell bash redirección scripting stdin

Publicado el 6-30 19:23