es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    #!/bin/bash
    
    # Configuración de QEMU
    setup_for_greengrass
    
    # Ejecutar QEMU en segundo plano y redirigir la salida a un archivo
    qemu-system-x86_64 <argumentos de="" qemu=""> >qemu_output.log 2>&1 &
    qemu_pid=$!
    
    # Comprobar continuamente el archivo de salida en busca de la salida específica que indica que la VM ha terminado de arrancar
    while ! grep -q "VM ha terminado de arrancar" qemu_output.log; do
        sleep 1
    done
    
    # Mensaje de prompt para el usuario para continuar con la instalación
    echo "Presiona cualquier tecla para continuar una vez que la VM haya terminado de arrancar..."
    read fullname
    
    # Instalar Greengrass
    install_greengrass
    
    # Limpieza
    kill "$qemu_pid"
    rm qemu_output.log
    

    En este script, el comando qemu-system-x86_64 se ejecuta en segundo plano y su salida se redirige a qemu_output.log. El PID del proceso de QEMU se almacena en qemu_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” en qemu_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 comando read 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.

Comments are closed.