Portál AbcLinuxu, 13. května 2025 23:52

Dotaz: Skriptování (bash), echo nevypisuje to co má

13.3.2012 20:31 Petr
Skriptování (bash), echo nevypisuje to co má
Přečteno: 325×
Odpovědět | Admin
Dobrý den, prosím vás, mohli by jste mi vysvětlit, proč to echo na konci nevypisuje jedničku ale nulu? Děkuji moc za každou odpověď.

#!/bin/bash

CODE="0"

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

echo "$CODE"

exit $CODE
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

13.3.2012 20:33 Petr
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
Odpovědět | | Sbalit | Link | Blokovat | Admin
trošku přehlednější kod

#!/bin/bash

CODE="0"

find $1 -type d | sort | while read CESTA

do

CODE="1"

done

echo "$CODE"

exit $CODE
13.3.2012 20:58 Kit
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
Odpovědět | | Sbalit | Link | Blokovat | Admin
Protože while v tomto případě běží v jiném procesu, který sice zdědí CODE, ale modifikuje ho jen v potomkovi. Častá chyba.
13.3.2012 21:13 Petr
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
Mohl bych ještě poprosit o návrh nějakého řešení?
13.3.2012 21:16 deadmail
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
13.3.2012 21:34 Kit
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
Řešením zřejmě bude úplné přeformulování úlohy. Většinou totiž bývá součástí většího celku, který se dá vyřešit tak elegantně, že s touto drobností se vůbec není potřeba zabývat. Například ten sort je tam zbytečný, vlastně celý while je zbytečný a zůstane jen
#!/bin/bash
find $1 -type d && CODE="1" || CODE="0"
V této podobě to sice fungovat nebude, ale princip je snad jasný. Předpokládám však, že ta úloha tak triviální není.
13.3.2012 22:28 Semo | skóre: 45 | blog: Semo
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
To fungovat nebude, pretoze navratova hodnota find-u je podla toho, ci bola chyba alebo nie. Nie ci nieco nasiel alebo nie. Find sa nechova ako grep. Takze bude treba nie co ako:
#!/bin/bash
x=`find $1 -type d -o quit | wc -l`
[[ $x -gt 0 ]] && CODE="1" || CODE="0"
If you hold a Unix shell up to your ear, you can you hear the C.
13.3.2012 22:46 Kit
Rozbalit Rozbalit vše Re: Skriptování (bash), echo nevypisuje to co má
Nechtělo se mi to řešit, protože dosud nevíme, jaký problém se vlastně řeší. To tvé řešení vypadá dobře, zkusil bych ho trochu zkrátit:
test "`find "$1" -type d`" != "" && CODE="1" || CODE="0"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.