Julio Biason
3 years ago
2 changed files with 45 additions and 2 deletions
@ -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 |
||||||
|
``` |
Loading…
Reference in new issue