Fundamentos de la línea de comandos
Teoría: Pipeline
En esta lección vamos a hablar de uno de los conceptos más útiles cuando trabajamos con la terminal en Unix: el pipeline.
¿Qué es un pipeline?
Cuando usamos la terminal, los programas generalmente reciben datos de entrada (lo que se llama STDIN) y entregan un resultado por pantalla (lo que se llama STDOUT).
Visualmente, lo representamos con este símbolo:
Este símbolo se llama pipe o tubo, y su función es redirigir la salida de un comando al siguiente.
Ejemplo básico
Imaginemos que tenemos un archivo .bashrc con varias configuraciones. Queremos encontrar todas las líneas que tengan la palabra alias, y de esas, solo las que también tengan la palabra color. Podríamos hacerlo con un comando así:
¿Qué está pasando aquí?
grep alias .bashrc: busca todas las líneas que contenganalias.|: pasa esas líneas como entrada al siguiente comando.grep color: de esas líneas, deja solo las que también contienencolor.
Salida esperada:
Es como si encadenáramos dos filtros: primero uno que atrapa las líneas con alias, y luego otro que deja pasar solo las que también tienen color.
¿Se puede seguir encadenando más comandos?
Claro que sí. Esa es la gracia de los pipelines: podemos seguir conectando más programas sin escribir un solo archivo temporal.
Por ejemplo, esto también es válido:
Aquí usamos cat para leer el archivo .bashrc, luego filtramos las líneas con alias, y después aplicamos otro filtro para dejar solo las que tienen color.
Otro ejemplo un poco más completo
Vamos a desglosar lo que pasa aquí:
cat source: lee el contenido del archivosource.grep Dog: de ese contenido, selecciona solo las líneas que contienen la palabraDog.uniq: elimina las líneas duplicadas (importante: para que funcione bien, las líneas duplicadas deben estar una al lado de otra).sort: ordena esas líneas alfabéticamente.
Estos cuatro comandos juntos realizan un proceso más complejo sin que tengamos que escribir código largo o temporales intermedios.
Puedes ver un ejemplo real de este comando en acción aquí:
Ventajas del pipeline
Este enfoque tiene muchas ventajas, y hace parte de la filosofía de Unix:
Los comandos como grep, sort, uniq, wc, entre otros, funcionan muy bien con esta idea porque leen desde STDIN y escriben a STDOUT.
¿Y si no usamos pipe?
Sin pipelines, tendríamos que guardar archivos temporales después de cada paso, algo así:
Esto es más largo, menos eficiente y más difícil de mantener. Con los pipes todo es más limpio y directo.
Resumen
- Un pipeline es una cadena de comandos conectados por el símbolo
|. - Permite enviar la salida de un comando como entrada al siguiente.
- Es una forma poderosa y simple de procesar datos en la terminal.
- Los pipelines siguen la filosofía Unix: comandos simples que se combinan entre sí.
- Comandos como
grep,sort,uniq,cat, y muchos otros funcionan muy bien con pipes. - Puedes encadenar tantos comandos como necesites.
Este concepto es clave para aprovechar la terminal al máximo. Prueba combinando comandos tú mismo para explorar todo su poder.