Quiero desinstalar algún programa a través de un script bash. Después de ejecutar el comando, el terminal me pregunta si estoy seguro de que quiero desinstalarlo. Entonces necesito responder y. Quiero hacerlo automáticamente y responder ydespués de un retraso de 10 segundos.
Hice este ejemplo pero no funciona.
#!/usr/bin
/opt/MNG/MNGVIEWHP/fe/uninstall
sleep 10
echo "y"
¿Alguna idea? Centos 7.2

#! /bin/bash -lugar de#!/usr/binuninstallprograma acepta parámetros o un script de configuración o no. Será más fácil de esa manerauninstally espera a que salga. Luego duerme 10 segundos. Luegoy\nhaga eco a stdout (que todavía está conectado a la terminal, no a stdin de ningún programa)Respuestas:
Para eso es el
yescomando. Produceyuno por línea indefinidamente, por lo que puede canalizarse a comandos que hacen preguntas sí / no.Eso responde
ya todas las preguntas. Para responderna todas las preguntas, reemplaceyesconyes n. Para una mezcla predefinida deyyn, puede reemplazaryescon:O ejecutarlo como:
Si necesita que la respuesta no esté disponible para leer antes de 10 segundos, haría:
Pero eso probablemente no sea necesario, cuando escribamos
yen la tubería, estará allí parauninstallleerlo cuando quiera leerlo, es poco probable que tenga que esperar a que esté listo para leerlo. La excepción sería siuninstalldecide vaciar la entrada antes de hacer la pregunta.Todos los que asumen que el
uninstallcomando solo lee cada respuesta como una línea de entrada de su entrada estándar.Para casos más complejos, donde el comando lee las respuestas directamente desde el dispositivo tty o donde necesita alimentar las respuestas condicionalmente (por ejemplo, en función de lo que genera el comando), ahí es donde usaría cosas como
expectozsh'szpty.Tenga en cuenta que muchos programas interactivos pueden ingresar a un modo no interactivo cuando se pasa alguna opción. Es posible que desee consultar primero su manual, antes de dedicar demasiado esfuerzo a solucionar el problema.
fuente
echo "y"cada vez, escribimosy<newline>, simulando que presionasyseguido de Enter. Si desea simular presionar Enter solo, eso estaría alimentando una línea vacía, entoncesprintf '%s\n' y n '' 2 3(¿dónde''está la línea vacía?).