Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Bash - když chci vypsat proměnnou, tak mi to vypíše prázdný řetěcez.

Dobrý den,
prosím vás, mám takový skript (zdrojový kod sem nechci kopirovat), kde se na základě první podmínky spustí cyklus A nebo cyklus B. V cyklu A je druhá podmínka na základě které se do proměnné CODE přiřadí bud jednička nebo dvojka.
V proměnné CODE je tedy číslo. Na konci skriptu když chci však proměnnou vypsat (echo "$CODE"), tak mi to vypíše prázdný řetěcez.

Rád bych, aby to vypsovalo to, co jsem do proměnné přiřadil v cyklu A.

Děkuji za odpoved.

Změna předmětu, původně: Bash
Pište výstižně předmět. Napište přesně, čeho se dotaz týká. Předměty typu "Pomozte plz" nebo "Dotaz" nejsou příliš vhodné, protože nic neříkají o vašem problému a těžko pak můžete očekávat včasnou odpověď.
add
Myslíš si, že jedno slovo je výstižný předmět?
(Kráťa) (Kráťa)

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
localvar.html
touchwood 13.03.2012 15:18
touchwood
Nakonec sem teda dám zdroják. #!/bin/bash CODE="0" find $1 -type d | sort | while read CESTA do VYP…
Luk 13.03.2012 19:51
Luk
vypisy se nerovnaj a proto se tam hodi ta jednicka, ne? To Continue v ifu je divné.
AZOR 13.03.2012 19:54
AZOR
ano, to je pravda. To zjednoduším, ale problém s tou proměnnou CODE to neřeší. Dekuju
Luk 13.03.2012 20:01
Luk
Jeste jsem to trochu poupravil #!/bin/bash porovnani() { VYPIS1=`ls $CESTA -p | grep "/"` VYPIS2=`l…
Luk 13.03.2012 20:05
Luk
ještě jedbodušší příklad #!/bin/bash CODE="0" find $1 -type d | sort | while read CESTA do CODE="1"…
Luk 13.03.2012 20:26
Luk
a keby si namiesto CODE="1" tam skusil bachnut nejake echo, aby si vedel vobec, ci to do danej sluck… nový
wam_Spider007 13.03.2012 20:57
wam_Spider007
tym 'find' sa ti forkne novy proces(subprocess), a CODE je jeho lokalna variabla ktora nieje viditel… poslední
emem 13.03.2012 21:40
emem

Nakonec sem teda dám zdroják.

#!/bin/bash

CODE="0"

  find $1 -type d | sort | while read CESTA
        do
          VYPIS1=`ls $CESTA -p | grep "/"`
          VYPIS2=`ls $CESTA -p`

         if [ "$VYPIS1" == "$VYPIS2" ]
           then
             continue
           else
             CODE="1"
         fi
        done

  echo "$CODE"   

  exit 0

prosim vás, proč to poslední echo na konci nevypíše jedničku, když se do proměnné CODE v podmínce přiřadí jednička?

Jeste jsem to trochu poupravil

#!/bin/bash

porovnani()
{
          VYPIS1=`ls $CESTA -p | grep "/"`
          VYPIS2=`ls $CESTA -p`

           if [ -z "$VYPIS1" ]
            then
            continue
           fi


           if [ "$VYPIS1" != "$VYPIS2" ]
             then
             CODE="1"
           fi
}


CODE="0"

  find $1 -type d | sort | while read CESTA
        do
          porovnani
        done

  echo "$CODE"

  exit 0

ale poslední echo stále nevypisuje jedničku, ikdyž se do proměnné CODE přiřadí

ještě jedbodušší příklad

#!/bin/bash

CODE="0"

find $1 -type d | sort | while read CESTA
      do
        CODE="1"
      done

echo "$CODE"

exit $CODE

echo na konci by podle mě mělo vypsat jedničku, ale ve skutečnosti vypíše nulu. Jak je to možné?

tym 'find' sa ti forkne novy proces(subprocess), a CODE je jeho lokalna variabla ktora nieje viditelna tomu
parent procesu....

urob to napriklad nejak takto:

for cesta in `find $1 -type d | sort` 
do
echo $cesta
CODE="1"
done

Zpět do poradny Odpovědět na původní otázku Nahoru