O pipeline
Um dos principais designs do Rsh é o pipeline, uma ideia de design que tem suas raízes décadas atrás, na filosofia original por trás do Unix. Assim como Rsh se extende a partir do tipo de dado string do Unix, também extende a ideia do pipeline para incluir mais do que apenas texto.
Básico
Um pipeline é construído com três partes: a entrada, o filtro e a saída.
> open "Cargo.toml" | inc package.version | save "Cargo_new.toml"
O primeiro comando, open "Cargo.toml"
, é
uma entrada (às vezes também chamado de "fonte" ou
"produtor"). Ele cria ou carrega dados com os quais
alimenta o pipeline. É a partir da entrada que os pipelines
conseguem dados para trabalhar. Comandos como
ls
também são entradas, já que pegam dados do
sistema de arquivos e os enviam através dos pipelines para que
possam ser usados adiante.
O segundo comando, inc package.version
, é um
filtro. Filtros recebem dados e normalmente fazem alguma coisa
com eles. Podem mudá-los (como o comando inc
no
nosso exemplo), ou podem executar outra operação, como registro
de log, conforme os valores passam.
O último comando, save "Cargo_new.toml"
,
é uma saída (às vezes chamado de "pia" ou
"ralo"). Uma saída recebe dados do pipeline e executa
alguma operação final sobre eles. No nosso exemplo, salvamos o
que chega pelo pipeline em um arquivo como passo final. Outros
tipos de comandos de saída podem exibir os dados para o usuário.
Trabalhando com comandos externos
Os comandos do Rsh se comunicam entre si usando tipos de dados fornecidos pelo próprio Rsh (veja tipos de dados), mas e os comandos de fora do Rsh? Vejamos alguns exemplos de como trabalhar com comandos externos:
comando_interno | comando_externo
Dados fluem do comando_interno para o comando_externo. Espera-se
que esses dados sejam strings, para que possam ser enviados para
a entrada padrão (stdin
) do comando_externo.
comando_externo | comando_interno
Dados vindo de um comando externo para o Rsh são agrupados em
uma string única e, então, passados para o comando_interno.
Comandos como lines
ajudam a trazer dados de
comandos externos de modo a facilitar sua utilização.
comando_externo_1 | comando_externo_2
Rsh trabalha com dados canalizados entre dois comandos externos
da mesma maneira que em outros shells, como Bash. A saída padrão
(stdout
) do comando_externo_1 é conectada à entrada
padrão (stdin
) do comando_externo_2, permitindo que
os dados fluam naturalmente entre os dois comandos.
Nos bastidores
Você pode ter se perguntado como vemos uma tabela se o
ls
é uma entrada e não uma saída. Rsh adiciona
automaticamente por nós uma saída usando outro comando chamado
autoview
, que é adicionado a qualquer pipeline que
não tenha uma saída que nos permita ver o resultado.
Com efeito, o comando:
> ls
E o pipeline:
> ls | autoview
São a mesma coisa.