
Estou tentando automatizar a instalação de um programa através de um script de shell. Existem algumas etapas que requerem interação do usuário a partir da linha de comando (confirmação, sim/não, etc.). Qual é a melhor maneira de contornar isso? Eu sei que uma possibilidade é usar um script esperado. Só queria saber se existe uma maneira melhor/mais limpa de fazer isso.
Responder1
Se a interação for simples, ou seja, apenas lê a entrada padrão, você pode simplesmente enviar as linhas específicas para a entrada do programa:
( echo yes ; echo 1024; echo yes ) | install.sh
Responder2
Se você quiser fazer algo que não apenas leia stdin (por exemplo, login ftp), você vai querer usaresperar.
Responder3
De outro tópico:
Se o seu comando não se importa com a rapidez com que você fornece informações e você realmente não precisa interagir com ele, você pode usar um heredoc.
Exemplo:
#!/bin/bash
command_you_want_to_execute <<EOD
interaction_1
intereaction_2
EOD
Se você precisar de ramificação com base na saída do programa, ou se o seu programa for sensível ao tempo dos seus comandos, então Expect é o que você deseja.