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