Skip to content
Latchkey

O Que É um Pipe? Conectando Comandos no Shell

Um pipe, escrito com o caractere | , conecta a saída padrão de um comando à entrada padrão do próximo, permitindo encadear ferramentas.

O pipe é uma das ideias mais poderosas do shell: pequenos programas que cada um faz uma coisa, conectados de modo que a saída de um se torna a entrada do próximo. Scripts de CI usam pipes constantemente, mas eles também escondem uma armadilha, onde uma falha no meio do pipeline pode passar despercebida a menos que você opte por um comportamento mais rigoroso.

O que um pipe faz

O operador | pega o stdout do comando à sua esquerda e o alimenta como o stdin do comando à sua direita. cat log.txt | grep ERROR | wc -l conta linhas de erro encadeando três ferramentas.

Por que pipes são úteis

Pipes permitem compor comandos simples em comportamento complexo sem arquivos temporários. Cada programa permanece focado, e você os monta como blocos de construção na linha de comando.

A armadilha do código de saída

  • Por padrão o código de saída de um pipeline é apenas o do último comando.
  • Se um comando anterior falha mas o último tem sucesso, o pipeline parece bom.
  • Isso pode mascarar falhas reais dentro de um step de CI.

Corrigindo com pipefail

Executar set -o pipefail muda a regra: o pipeline falha se qualquer comando nele falhar. Combinado com set -e, isso faz um estágio quebrado realmente parar o job em vez de passar despercebido.

Pipes em CI

Um bug clássico de CI é generate | tee output.txt onde generate trava mas tee tem sucesso, então o step passa com saída vazia. Adicionar set -o pipefail captura exatamente isso, que é por que ele pertence a set -euo pipefail.

Pipelines confiáveis em runners gerenciados

Nos runners da Latchkey, habilitar pipefail no topo de um step significa que uma falha em qualquer parte de um pipe faz o job falhar. Isso transforma bugs silenciosos e difíceis de rastrear em falhas claras e precoces.

Principais conclusões

  • Um pipe conecta o stdout de um comando ao stdin do próximo comando.
  • Por padrão apenas o código de saída do último comando conta, ocultando falhas no meio do pipe.
  • set -o pipefail faz qualquer comando que falha fazer o pipeline inteiro falhar.

Guias relacionados