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 y
despué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/bin
uninstall
programa acepta parámetros o un script de configuración o no. Será más fácil de esa manerauninstall
y espera a que salga. Luego duerme 10 segundos. Luegoy\n
haga eco a stdout (que todavía está conectado a la terminal, no a stdin de ningún programa)Respuestas:
Para eso es el
yes
comando. Producey
uno por línea indefinidamente, por lo que puede canalizarse a comandos que hacen preguntas sí / no.Eso responde
y
a todas las preguntas. Para respondern
a todas las preguntas, reemplaceyes
conyes n
. Para una mezcla predefinida dey
yn
, puede reemplazaryes
con: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
y
en la tubería, estará allí parauninstall
leerlo cuando quiera leerlo, es poco probable que tenga que esperar a que esté listo para leerlo. La excepción sería siuninstall
decide vaciar la entrada antes de hacer la pregunta.Todos los que asumen que el
uninstall
comando 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
expect
ozsh
'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 presionasy
seguido 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?).