O pipeline
Um dos principais designs do Nu é 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 Nu 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 Nu se comunicam entre si usando tipos de dados fornecidos pelo próprio Nu (veja tipos de dados), mas e os comandos de fora do Nu? 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 Nu 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
Nu 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. Nu 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.