
Estoy intentando automatizar la instalación de un programa mediante un script de shell. Hay algunos pasos que requieren la interacción del usuario desde la línea de comando (confirmación, sí/no, etc.). ¿Cuál es la mejor manera de evitarlo? Sé que una posibilidad es utilizar un script esperado. Sólo quería saber si existe una forma mejor o más limpia de hacer esto.
Respuesta1
Si la interacción es simple, es decir, solo lee desde la entrada estándar, puedes simplemente enviar las líneas particulares a la entrada del programa:
( echo yes ; echo 1024; echo yes ) | install.sh
Respuesta2
Si desea hacer algo que no se limite a leer desde la entrada estándar (por ejemplo, iniciar sesión mediante ftp), querrá usaresperar.
Respuesta3
De otro hilo:
Si a su comando no le importa qué tan rápido le da entrada y realmente no necesita interactuar con él, entonces puede usar un heredoc.
Ejemplo:
#!/bin/bash
command_you_want_to_execute <<EOD
interaction_1
intereaction_2
EOD
Si necesita bifurcaciones basadas en la salida del programa, o si su programa es sensible al tiempo de sus comandos, entonces lo que desea es Expect.