Pular para o conteúdo

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.

Ver Markdown

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

  1. Criar a sessão (com o agente, se for o caso).
  2. Esperar a condição que diz que o processo está pronto.
  3. Ler o que já está na tela — é o que confirma que a interface assumiu.
  4. Enviar o texto, pedindo o Enter.
  5. Esperar de novo antes de ler o resultado.
  6. 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.