O Que É stdin? O Fluxo de Entrada Padrão
stdin (entrada padrão) é o fluxo padrão do qual um programa lê os dados que chegam, geralmente o teclado interativamente ou um arquivo ou pipe em scripts.
Todo programa começa com três fluxos padrão, e stdin é aquele do qual ele lê. Interativamente, stdin é seu teclado; em um script, frequentemente é um arquivo ou a saída de outro comando enviada por pipe. No CI, onde não há teclado, entender stdin explica por que algumas ferramentas travam esperando por uma entrada que nunca chega.
O que é stdin
stdin é o file descriptor 0, o canal do qual um processo lê a entrada por padrão. Funções como read no shell, ou input() em Python, puxam do stdin.
De onde stdin vem
Em um prompt interativo, stdin está conectado ao seu terminal. Em um pipeline, a saída do comando anterior se torna o stdin do próximo comando. Com redirecionamento, um arquivo pode ser alimentado como stdin.
Alimentando stdin
- Um pipe:
cat data.txt | sortenvia a saída decatparasortvia stdin. - Redirecionamento:
sort < data.txtlê o arquivo como stdin. - Um here-document fornece múltiplas linhas inline como stdin.
Por que stdin importa em CI
CI roda de forma não interativa, então não há teclado por trás do stdin. Uma ferramenta que pede confirmação vai travar ou ler fim de arquivo. Passar flags como --yes ou enviar a entrada necessária por pipe evita esses travamentos.
stdin fechado em CI
Em muitos ambientes de CI o stdin está fechado ou vazio, então um read retorna imediatamente. Scripts que assumem entrada interativa devem ser reescritos para receber argumentos ou variáveis de ambiente.
Runners gerenciados e entrada
Nos runners da Latchkey, os jobs rodam sem supervisão, então projete os steps para não precisar de entrada interativa. Forneça valores por variáveis de ambiente, arquivos ou flags de comando em vez de esperar por um prompt.
Principais conclusões
- stdin é o fluxo de entrada padrão, file descriptor 0.
- Pode vir de um teclado, um arquivo, um pipe ou um here-document.
- CI é não interativo, então ferramentas que esperam por stdin podem travar um job.