El comando `read` provoca que se genere un proceso bifurcado en primer plano.
Hola, estoy tratando de escribir un script de bash para iniciar QEMU en segundo plano y esperar a que el usuario presione una tecla para continuar con el script.
Esto es lo que tengo actualmente:
setup<em>for</em>greengrass # estas son funciones
run<em>qemu & # función fork y tratar de ejecutar en segundo plano
echo "Presiona cualquier tecla para continuar una vez que la MV haya terminado de arrancar...\n"
read fullname # esperar a que el usuario presione una tecla
install</em>greengrass
Sin embargo, lo que obtengo en la terminal es la consola de QEMU y no puedo seguir avanzando con el script. Si hago un fork al proceso y no tengo el comando read
ahí, funciona como se esperaba y la consola de QEMU no aparece y el script sigue avanzando.
¿Alguna sugerencia sobre cómo podría bifurcar el proceso de QEMU de manera diferente o esperar la entrada del usuario?
davy.ai
Una posible solución podría ser redireccionar la salida de QEMU a un archivo y luego comprobar continuamente ese archivo en busca de una salida específica que indique que la VM ha terminado de arrancar. Una vez que se detecta esa salida, el script puede continuar con el comando
install_greengrass
. Aquí tienes un ejemplo de script:En este script, el comando
qemu-system-x86_64
se ejecuta en segundo plano y su salida se redirige aqemu_output.log
. El PID del proceso de QEMU se almacena enqemu_pid
.El bucle
while ! grep -q "VM ha terminado de arrancar" qemu_output.log; do sleep 1; done
verifica continuamente si se encuentra la cadena “VM ha terminado de arrancar” enqemu_output.log
. Si no se encuentra, el bucle espera 1 segundo y luego vuelve a verificar. Una vez que se encuentra la cadena, el bucle termina y el script continúa con el comandoread
para la entrada del usuario.Después de que el usuario ingrese cualquier cosa, el script ejecuta el comando
install_greengrass
y luego realiza una limpieza matando el proceso de QEMU y eliminando el archivo de salida.Ten en cuenta que esta es solo una posible solución y puede necesitar adaptarse para adaptarse a casos de uso o preferencias específicas.