Ler, enviar e esperar
Como ler o histórico de um terminal, mandar texto ou uma interrupção para o processo e esperar uma condição antes do próximo passo.
Três operações formam o ciclo de trabalho com qualquer processo no Terminal: ler o que ele escreveu, enviar o que você quer e esperar que ele chegue a um estado antes do próximo passo. Na interface, as três são gesto direto — rolar, digitar, olhar. Por linha de comando, elas têm contrato próprio, e é ele que torna a automação previsível.
Ler o histórico
Na interface, o histórico é o próprio conteúdo do painel: role para trás para ver o que passou.
Pela linha de comando, a leitura tem três modos, e escolher o modo certo evita surpresa:
| Modo | O que devolve | Quando usar |
|---|---|---|
| Página limitada | Um bloco delimitado, com o cursor para continuar dali | Você quer acompanhar sem reler tudo |
| Só o que é novo | Apenas a saída desde uma leitura anterior | Você já leu até certo ponto e quer o que veio depois |
| Sessão inteira retida | Tudo o que ainda está guardado | Você precisa do contexto completo do que sobrou |
Regras que valem para todos os modos:
- Sem cursor e sem limite, a leitura pagina a sessão retida e devolve tudo o que existe.
- O cursor devolvido numa leitura é o que você passa na leitura seguinte para receber só o novo.
- Há teto por leitura e teto para a sessão inteira. Quando o mais antigo já foi descartado, o resultado diz isso em vez de fingir completude.
- Os modos são exclusivos entre si: pedir a sessão inteira junto com um limite de linhas, ou um limite de linhas junto com um cursor, é erro de argumento.
- A leitura prioriza a tela viva. Se o processo desenha uma interface de tela cheia (um agente, um editor de terminal), a leitura legível mostra essa tela renderizada; o texto bruto continua acessível na leitura estruturada.
- Painel sem sessão viva falha com aviso, em vez de devolver leitura vazia: o painel existe, mas não há nada rodando nele.
Enviar texto
- O texto pode vir direto na chamada ou de um arquivo. Para textos de várias linhas, use arquivo: aspas de shell estragam quebras de linha e citações num texto longo.
- Enviar não implica que o Enter foi dado nem que o processo entendeu: é preciso pedir o Enter explicitamente quando você quer que a linha seja submetida.
- Uma recusa de envio reprova o comando. Se a resposta disser que o envio não foi aceito, o próximo passo não deve ser tratado como se tivesse sido.
- Interromper é diferente de enviar. A interrupção manda o sinal de parada para o processo — é o equivalente a um cancelamento, e pode interromper trabalho em andamento de um agente.
Esperar antes de enviar
Escrever num processo que ainda não está pronto é a causa mais comum de texto embaralhado. A espera existe para isso:
- Esperar o fim do processo — útil para comandos que terminam sozinhos.
- Esperar a interface do agente ficar ociosa — é o que você quer antes de mandar a primeira mensagem para um agente que acabou de subir.
- A espera tem teto de tempo e um padrão; se o teto for curto demais, a espera expira mesmo com o processo vivo.
- Condição não satisfeita reprova o comando. Encadear envio e espera sem olhar o resultado mascara tanto uma recusa de envio quanto uma espera expirada.
Sequência recomendada
- Criar a sessão (com o agente, se for o caso).
- Esperar a condição que diz que o processo está pronto.
- Ler o que já está na tela — é o que confirma que a interface assumiu.
- Enviar o texto, pedindo o Enter.
- Esperar de novo antes de ler o resultado.
- Ler só o que é novo, a partir do cursor da leitura anterior.
Por linha de comando
As opções exatas de leitura, envio, interrupção e espera — incluindo os tetos e os modos exclusivos — estão em Referência de comandos do Terminal.