diff --git a/content/books/shell-por-dia/_index.md b/content/books/shell-por-dia/_index.md index 70a28f4..383fc0f 100644 --- a/content/books/shell-por-dia/_index.md +++ b/content/books/shell-por-dia/_index.md @@ -7,8 +7,7 @@ hide_pages = true hide_content = false +++ -## Portuguese/Português - * [Introdução](@./introducao.md) * [Entradas e Saídas](@./entradas-e-saidas.md) * [Redirecionamento](@./redicionamento.md) +* [Pipes](@./pipes.md) diff --git a/content/books/shell-por-dia/pipes.md b/content/books/shell-por-dia/pipes.md new file mode 100644 index 0000000..a8f283a --- /dev/null +++ b/content/books/shell-por-dia/pipes.md @@ -0,0 +1,44 @@ ++++ +title = "Um Shell Por Dia: Pipes" +date = 2021-09-14 + +[taxonomies] +tags = ["por dia", "shell", "entradas", "saídas", "stdin", "stdout"] ++++ + +Ainda sobre entradas e saídas, imagine que você queira usar a saída de um +arquivo como entrada de outro. Usando apenas direcionamentos, poderíamos fazer: + +``` +comando1 > um_arquivo +comando2 < um_arquivo +``` + +(ou seja, salvar a saída de `comando1` em um arquivo qualquer -- que chamamos +de "um_arquivo" aqui -- e usar o conteúdo desse arquivo como entrada para +`comando2`.) + +Com pipes, podemos fazer isso diretamente: + +``` +comando1 | comando2 +``` + +O que o pipe (aquele "`|`") faz é pegar o stdout do comando da esquerda e fazer +com que esse seja o stdin do comando da direita. + +A ligação pode ser usadas quantas vezes você quiser: + +``` +comando1 | comando2 | comando3 | comando4 +``` + +O stdout de comando1 vai ficar como stdin do comando2; o stdout do comando2 vai +ser o stdin do comando3; e stdout do comando3 vai ser o stdin do comando4. + +E como o pipe trabalha apenas com stdout, não dá pra fazer algo com stderr. Mas +você pode usar redicionamentos para mandar stderr para stdout e aí usar o pipe. + +``` +comando1 2>&1 | comando2 +```