GNU/Linux >> Tutoriales Linux >  >> Linux

¿El bucle ignora el cambio de variable de una subcapa en segundo plano?

Escribí un script que contiene un until círculo. Este ciclo debe ejecutarse hasta que una variable booleana se establezca en true desde fuera del bucle. Desafortunadamente, el bucle ignora que la variable se ha establecido en verdadero y sigue ejecutándose. Aquí hay algunas líneas que generan este problema:

boolean=false
{ sleep 5 && boolean=true && echo "boolean is true now" ; } &
{ until [ "$boolean" = true ] ; do sleep 1 && echo $boolean ; done ; } &&
echo "boolean is true now: $boolean"

La salida que esto genera es:

false
false
false
false
boolean is true now
false
false
false
...

¿Cómo puedo hacer que el ciclo salga cuando el boolean se establece en true ?

Respuesta aceptada:

El & el personaje hace un proceso de fondo. Un proceso en segundo plano se ejecuta de forma asíncrona en una subcapa. Las variables se pueden pasar de un shell principal a un subshell, no al revés. Sin embargo, puede solucionarlo si realmente necesita el valor establecido en el shell secundario:

boolean=$(mktemp) && echo "false" >$boolean
{ sleep 5 && echo true >$boolean && echo "boolean is true now" ; } &
{ until [ "$(cat $boolean)" = "true" ] ; do sleep 1 && cat $boolean ; done ; } &&
echo "boolean is true now: $(cat $boolean)"

Eso crea un archivo temporal cuyo contenido es el valor booleano. En el until bucle ese archivo se comprueba hasta que contenga verdadero.

Aviso:

Recomiendo hacer lo siguiente en su secuencia de comandos (si es posible):

{ sleep 5 && echo "background process done" ; } &
wait
echo "continue in foregound."

wait espera a que finalice el proceso en segundo plano.


Linux
  1. ¿Cómo establecer una variable igual a la salida de un comando en Grub2?

  2. ¿Cómo cambiar el nombre de una variable Bash en un bucle y luego expandir el nombre cambiado?

  3. ¿Cambiar fuente en Echo Command?

  4. Generación de un hash SHA-256 desde la línea de comandos de Linux

  5. Obtenga los últimos 4 caracteres de salida desde la salida estándar

Cómo cambiar el color de salida de 'Echo' en Linux

El valor hash MD5 es diferente de Bash y PHP

Cambiar el número de la partición de sda1 a sda2

¿Cómo ejecutar un comando en segundo plano con un retraso?

Cómo cambiar el directorio de nueva ventana predeterminado desde dentro de tmux

¿Evitar que el inicio de sesión ssh imprima motd desde el cliente?