Skip to content
Latchkey

O Que É um Shell Não-Interativo? Scripts Sem um Prompt

Um shell não-interativo roda comandos de um script ou fluxo de entrada sem pedir input a um usuário, o modo em que quase todo o trabalho de CI acontece.

Um shell interativo espera você digitar comandos; um shell não-interativo lê comandos de um script e os roda sem pedir input. CI é quase inteiramente não-interativo: não há um humano para responder a um prompt ou confirmar uma exclusão. Reconhecer isso explica muitas falhas exclusivas de CI, como um comando travando à espera de uma entrada que nunca chega.

O que significa não-interativo

Um shell é não-interativo quando não está conectado a um usuário digitando em um prompt. Ele lê de um script ou de um fluxo com pipe e roda comandos direto, sem prompt exibido.

Interativo versus não-interativo

Um shell interativo mostra um prompt, suporta edição de linha e histórico, e lê arquivos de inicialização diferentes. Um shell não-interativo não faz nada disso; ele apenas executa os comandos que recebe.

Consequências comuns

  • Prompts de confirmação travam ou leem end-of-file.
  • Saída colorida ou paginada pode ser desativada.
  • Arquivos de inicialização como ~/.bashrc podem não ser fonteados.

Projetando para isso

Scripts destinados a uso não-interativo devem evitar prompts: passe flags --yes, forneça entrada via arquivos ou variáveis de ambiente, e nunca presuma que um humano pode intervir. Caso contrário o script estanca.

Shells não-interativos em CI

Toda etapa de CI é um shell não-interativo, então qualquer ferramenta que pause à espera de entrada travará o job até que ele atinja o timeout. Use flags não-interativas e forneça todas as entradas antecipadamente, e verifique que seu script não precisa de confirmação manual.

Execuções não assistidas em runners gerenciados

Nos runners da Latchkey, os jobs rodam não assistidos em shells não-interativos. Projete as etapas de modo que toda decisão seja tomada por flags, variáveis de ambiente ou arquivos, nunca por um prompt que ninguém está lá para responder.

Principais conclusões

  • Um shell não-interativo roda comandos com script sem prompt ou usuário.
  • Ferramentas que esperam entrada travam no modo não-interativo.
  • Todas as etapas de CI são não-interativas, então forneça toda entrada antecipadamente.

Guias relacionados