bash, hodnota premennej za while

Sekcia: Programovanie 21.04.2010 | 00:16
Avatar fraxinus Debian 5.0  Používateľ
Mam takyto bash skript:
b=1
echo "pred je $b"
echo | while read a; do
  echo "vnutri je $b"
  b=2
  echo "vnutri zmenim na $b"
done
echo "za while je $b"

Vypise toto:
pred je 1
vnutri je 1
vnutri zmenim na 2
za while je 1

Za while b nie je 2 lebo kvoli while bash spusta dalsi proces takze tam je to akoby lokalna premenna. Potrebujem aby za while bola premenna b=2. Skusal som na koniec while dat export b ale to nepomoze. "b" je pocitadlo a potrebujem aby sa v tom while zvysovalo aby som ho mohol potom pouzivat. Nechcem to cez docasne subory ani cez std vystup/vstup (tych pocitadiel/premennych je tam viacej).
I am not here. Isn't here just there without a t?
    • Re: bash, hodnota premennej za while 21.04.2010 | 01:39
      Vlado   Návštevník
      Ahoj,
      bash spusti novy proces nie kvoli while, ale kvoli "|".
      Bez "echo |" to funguje ako potrebujes.
      • Re: bash, hodnota premennej za while 21.04.2010 | 03:05
        Avatar fraxinus Debian 5.0  Používateľ
        ja tam to echo potrebujem (normalne je tam nieco ine)
        I am not here. Isn't here just there without a t?
        • Re: bash, hodnota premennej za while 21.04.2010 | 03:11
          Avatar Samuel BWPOW Kupka Almalinux, OpenWRT  Používateľ
          Napis sem, co tam je. Mozno sa to da cele napisat inak.
          Strach dát najevo své pocity a zjednat si u druhých respekt je jedním z problémů civilizovaného člověka, který se naučil zpochybňovat svou vlastní pravdu pro zdání objektivity
          • Re: bash, hodnota premennej za while 21.04.2010 | 03:23
            Avatar fraxinus Debian 5.0  Používateľ
            2kb kus bashoveho kodu
            I am not here. Isn't here just there without a t?
    • Re: bash, hodnota premennej za while 27.04.2010 | 23:23
      Avatar rhn   Používateľ
      Môžeš použiť dočasný súbor:

      #!/bin/bash
      
      TMP=/tmp/temporary.$$
      b=1
      echo "pred je $b"
      echo Vstupne data > $TMP
      while read a; do
        echo "vnutri je $b"
        b=2
        echo "vnutri zmenim na $b"
      done < $TMP
      echo "za while je $b"
      
      rm $TMP
      !!! Dôležité !!! Presmerovanie treba dať na done <
      • Re: bash, hodnota premennej za while 27.04.2010 | 23:28
        Avatar fraxinus Debian 5.0  Používateľ
        Precital si ten dotaz? Ved tam pisem:

        > Nechcem to cez docasne subory
        I am not here. Isn't here just there without a t?