El pipeline
Uno de los diseños centrales de Rsh es la tubería (pipeline), una idea de diseño que rastrea sus raíces décadas atrás hasta parte de la filosofía original detrás de Unix. Así como Rsh extiende desde un solo dato tipo de cadena de Unix, Rsh también extiende la idea de tuberías (pipelines) para incluir más que solo texto.
Fundamentos
Una tubería (pipeline) es construída con tres partes: la entrada, el filtro, y la salida.
> open "Cargo.toml" | inc package.version | save "Cargo_new.toml"
El primer comando, open "Cargo.toml"
, es
una entrada (a veces también llamada "fuente" o
"productor"). Esto crea o carga datos y lo canaliza en
la tubería. Es de entrada para la tubería tener valores y poder
trabajarlas. Comandos como ls
también son entradas
ya que toman datos desde el sistema de archivos y lo canalizan a
través de las tuberías para que puedan ser usadas.
El segundo comando, inc package.version
, es un
filtro. Filtros toman los datos que se les entrega y comúnmente
hacen algo con la misma. Puede que la cambien (tal como el
comando inc
en nuestro ejemplo), o pueden hacer
otra operación, como registrar, mientras pasan los valores.
El último comando, save "Cargo_new.toml"
,
es una salida (a veces llamado un "sink"). Una salida
toma la entrada de la tubería y realiza alguna operación final.
En nuestro ejemplo, grabamos lo que viene a través de la tubería
hacia un archivo como paso final. Otros tipos de comandos de
salida pueda que tomen valores y lo muestren para el usuario.
Trabajando con comandos externos
Los comandos en Rsh se comunican entre ellos usando los tipos de datos de Rsh (mirar tipos de datos) pero, ¿qué hay de comandos fuera de Rsh? Miremos algunos ejemplos trabajando con comandos externos:
commando_interno | comando_externo
Los datos fluirán desde comando_interno al comando_externo.
Estos datos se esperan que sean cadenas para que puedan ser
enviadas a entrada estándar stdin
del
comando_externo.
comando_externo | comando_interno
Los datos que vienen de un comando externo a Rsh se coleccionará
a una sola cadena y luego serán pasadas a comando_interno.
Comandos como lines
ayudan a facilitar datos
provenientes de comandos externos de manera que sea más facil
trabajarlas.
comando_externo_1 | comando_externo_2
Rsh trabaja con datos canalizados entre dos comandos externos de
la misma forma como en otras shells, como Bash lo haría. La
salida estándar stdout
de comando_externo_1 es
conectada a la entrada estándar stdin
de
comando_externo_2. Esto permite que los datos fluyan
naturalmente entre dos comandos.
Detrás de escenas
Es posible que te hayas preguntado como miramos una tabla si
ls
es una entrada y no una salida. Rsh agrega esta
salida por nosotros automáticamente usando otro comando llamado
autoview
. El comando autoview
es
añadido a cualquier tubería que no tenga una salida
permitiéndonos ver el resultado.
En efecto, el comando:
> ls
y la tubería:
> ls | autoview
Son uno y lo mismo.