Redirección de entrada y salida en Bash: >, >> y < explicados con ejemplos
Introducción
En la línea de comandos podés redirigir dónde va la salida de un programa o de dónde toma su entrada. Los operadores más usados son >, >> y <. En este tutorial vas a ver la diferencia entre sobrescribir y añadir, cómo funciona la redirección de entrada y algunos ejemplos prácticos que podés copiar y pegar en tu terminal.
Conceptos básicos
- > : redirige la salida estándar (stdout) de un comando a un archivo. Si el archivo ya existe, lo sobrescribe (se pierde su contenido anterior).
- >> : también redirige stdout, pero añade al final del archivo sin borrar lo que ya había.
- < : redirige la entrada estándar (stdin) de un comando desde un archivo, como si lo estuvieras tecleando con el teclado.
Estos operadores trabajan con los descriptores de archivo 0 (stdin), 1 (stdout) y 2 (stderr). Por defecto, > y >> actúan sobre el descriptor 1; si querés actuar sobre el error estándar usás 2> o 2>>.
Sobrescribir vs. añadir
Supongamos que tenés un archivo registro.txt con estas líneas:
Primera línea
Segunda línea
Si ejecutás:
ls -l > registro.txt
El contenido de registro.txt pasa a ser únicamente la salida de ls -l. Las líneas originales se borran.
En cambio, con:
ls -l >> registro.txt
El archivo queda así:
Primera línea
Segunda línea
<salida de ls -l>
O sea, se añade al final.
Redirección de entrada
El operador < toma el contenido de un archivo y se lo entrega como entrada al comando. Por ejemplo:
cat < archivo.txt
Esto es equivalente a simplemente hacer cat archivo.txt, pero muestra cómo funciona la redirección: el shell abre archivo.txt, lo conecta al stdin de cat y luego cat lo lee y lo muestra por pantalla.
Otro uso típico es filtrar o procesar datos:
grep 'error' < log.txt
Aquí grep recibe el contenido de log.txt como entrada y muestra solo las líneas que contienen la palabra error.
Ejemplos prácticos
1. Crear una lista de archivos
ls -l > lista.txt
Salida esperada: el archivo lista.txt contendrá algo como:
total 24
-rw-r--r-- 1 usuario usuario 0 sep 10 12:00 archivo1.txt
-rw-r--r-- 1 usuario usuario 0 sep 10 12:00 archivo2.txt
Si volvés a correr el mismo comando, lista.txt se sobrescribe con la nueva salida.
2. Añadir la fecha a un registro
date >> registro.txt
Cada vez que lo ejecutás, la fecha y hora actual se agregan al final de registro.txt, preservando los ingresos anteriores.
3. Usar entrada redirigida con sort
sort < nombres.txt > nombres_ordenados.txt
Primero sort lee nombres.txt desde su stdin (porque se lo damos con <), ordena las líneas y escribe el resultado en stdout en nombres_stdout, que redirigimos a nombres_ordenados.txtcontxt. El archivo nombres_ordenados.txt` quedará con los nombres en orden alfabético.
4. Combinar redirección de entrada y salida con pipes
Aunque no es parte deba que veremos más adelante, vale la pena notar que podés combinar:
cat < entrada.txt | grep 'OK' > salida.txt
Aquí cat lee entrada.txt, su salida va al pipe (|), grep filtra las líneas con OK y finalmente se redirige a salida.txt.
Buenas prácticas y trucos
- No confundir
>con>> sin querer**: si no estás seguro de que el archivo exista o no quieras perder su contenido, usá>>o primero hacé una copia de seguridad (cp archivo.txt archivo.txt.bak`). - Silenciar errores: podés redirigir stderr a
/dev/nullpara descartar mensajes de error:comando 2> /dev/null. - Anexar con marca de tiempo: para un log, podés hacer
echo "[$(date)] Mensaje" >> registro.log. - Usar aquí-documentos cuando necesites múltiples líneas de entrada sin crear un archivo temporal:
cat > archivo.txt <<'EOF' línea 1 línea 2 EOF - Comprobar qué descriptor redirigís: si querés capturar tanto stdout como stderr en el mismo archivo, usá
comando > salida.txt 2>&1.
Conclusión
Los operadores >, >> y < son herramientas fundamentales para controlar el flujo de datos en la línea de comandos. Entender la diferencia entre sobrescribir y añadir te permite manipular archivos de forma segura y predecible. Practicá con los ejemplos mostrados y pronto vas a usar redirecciones sin pensar, ya sea para guardar logs, procesar textos o automatizar tareas en tus scripts.
¿Te quedó alguna duda? Probá los comandos en tu terminal y observá cómo cambian los archivos. La práctica constante es la mejor forma de interiorizar estos conceptos.
DUGLAS MORENO
Comentarios (0)
Sé el primero en comentar.