GNU/Linux >> Znalost Linux >  >> Linux

Ignoruje smyčka změnu proměnné z podskořápky na pozadí?

Napsal jsem skript, který obsahuje until smyčka. Tato smyčka by měla běžet, dokud není booleovská proměnná nastavena na true z vnějšku smyčky. Bohužel smyčka ignoruje, že proměnná byla nastavena na true a běží dál. Zde je několik řádků, které generují tento problém:

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"

Výstup, který to generuje, je:

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

Jak mohu provést ukončení smyčky, když je boolean je nastaveno na true ?

Přijatá odpověď:

& postava dělá proces na pozadí. Proces na pozadí se provádí asynchronně v subshell. Proměnné mohou být předány z nadřazeného shellu do sub-shell, nikoli naopak. Pokud však opravdu potřebujete hodnotu nastavenou v podřízeném prostředí, můžete to obejít:

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)"

To vytvoří dočasný soubor, jehož obsahem je logická hodnota. V until smyčka, že soubor je kontrolován, dokud neobsahuje true.

Upozornění:

Doporučuji ve vašem skriptu provést následující (pokud je to možné):

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

wait čeká na dokončení procesu na pozadí.


Linux
  1. Změnit písmo v příkazu Echo?

  2. Jak změnit výchozí jádro (zavedení ze starého jádra) v CentOS/RHEL 8

  3. Číst hodnoty do proměnné shellu z kanálu

  1. Získejte poslední 4 znaky výstupu ze standardního výstupu

  2. Jak změnit jazyk mého git?

  3. Jak mohu spočítat počet znaků v proměnné Bash

  1. Jak změnit kurzor terminálu z pole na řádek?

  2. Změňte číslo oddílu z sda1 na sda2

  3. Jak změnit výchozí adresář nového okna z tmux