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.

virsh destroy &> /dev/null todavía muestra una salida en blanco.

Así que tengo un problema molesto. Tengo un script que cambia algunas configuraciones en un archivo de texto dado. Para cambiar ese archivo específico, primero debo destruir la máquina virtual invitada en mi KVM. El problema es que cada vez que se detiene, hay un espacio en blanco en la salida del script, como se puede ver:

¡vfp-8vr encontrado!
Comprobando si vfp-8vr se ha detenido ................................. [OK]

Comprobando si ha cambiado el nodo de vfp-8vr ............................ [OK]
Comprobando si vfp-8vr se ha iniciado ................................. [OK]
¡vfp-9vr encontrado!
Comprobando si vfp-9vr se ha detenido ................................. [OK]

Comprobando si ha cambiado el nodo de vfp-9vr ............................ [OK]
Comprobando si vfp-9vr se ha iniciado ................................. [OK]
¡vfp-10vr encontrado!
Comprobando si vfp-10vr se ha detenido ................................. [OK]

Comprobando si ha cambiado el nodo de vfp-10vr ............................ [OK]
Comprobando si vfp-10vr se ha iniciado ................................. [OK]

He incluido /dev/null en mi script ya que oculta la salida, y en teoría funciona, pero todavía aparece un espacio en blanco a pesar de eso…

por i in "${arr[@]}"
do
  if [[ -n "$i" ]]
     then
         echo "$i encontrado!"

     virsh destroy $i &> /dev/null
     echo -e "Comprobando si \e[32m$i\e[0m se ha detenido ................................. [OK]"

     virsh numatune $i $opt_node0
     echo -e "Comprobando si \e[32m$i\e[0m ha cambiado de nodo ............................ [OK]"

     virsh start $i &> /dev/null
     echo -e "Comprobando si \e[32m$i\e[0m se ha iniciado ................................. [OK]"
fi
done

¿Alguien tiene alguna idea de cómo puedo ejecutar virsh destroy en segundo plano sin mostrar ese molesto espacio en mi salida?

Descargo de responsabilidad: Ya he utilizado [Comando] > /dev/null 2>&1 & también, ¡y sigue pasando lo mismo!

Tags:  ,

Answer

  1. Avatar for davy.ai

    Una solución para ejecutar el comando virsh destroy en segundo plano sin mostrar un espacio en blanco en la salida podría ser redirigir la salida del comando a /dev/null y agregar el símbolo de ampersand al final del comando, de esta manera:

    virsh destroy $i >/dev/null 2>&1 &
    

    Esto ejecutará el comando en segundo plano y redirigirá la salida a /dev/null, lo cual debería evitar que aparezcan espacios en blanco en la salida. Además, el 2>&1 asegura que tanto la salida estándar como el error estándar se redirijan a /dev/null.

    Si esta solución no funciona, otro enfoque posible podría ser intentar usar el comando tee para escribir la salida del script en un archivo y también redirigirla a /dev/null. Esto podría ayudar a aislar la fuente del espacio en blanco y proporcionar más información para la resolución de problemas.

    for i in "${arr[@]}"
    do
      if [[ -n "$i" ]]
         then
             echo "$i ¡Encontrado!"
    
             virsh destroy $i >/dev/null 2>&1 | tee -a destroy.log >/dev/null
             echo -e "Verificar si \e[32m$i\e[0m se ha detenido ............................. [OK]"
    
             virsh numatune $i $opt_node0
             echo -e "Verificar si el nodo de \e[32m$i\e[0m ha cambiado ..................... [OK]"
    
             virsh start $i >/dev/null 2>&1 &
             echo -e "Verificar si \e[32m$i\e[0m se ha iniciado ............................ [OK]"
    
      fi
    done
    

    En este ejemplo, la salida de virsh destroy se redirige tanto a /dev/null como a destroy.log. La opción -a se utiliza con tee para agregar la salida al archivo de registro en lugar de sobrescribirlo cada vez. Nuevamente, el 2>&1 asegura que tanto la salida estándar como el error estándar se redirijan a /dev/null.

Comments are closed.