Skript na posilani sms vsude
Alexej Sveshnikov
svesh na seznam.cz
Čtvrtek Červen 26 09:12:25 CEST 2003
Dne St, 25 een 2003 at 21:12 GMT, Dave Lister napsal:
> Rad bych se taky zeptal zkusenejsich skriptaru, jak dostat hodnotu
> promenne nastavene v cyklu ven. pouzivam konstrukci
>
> ... | while read var; do
> ... PROM=$var ...
> done
>
> a vypada to, ze promenna $PROM je mimo ten cyklus unset, coz nechapu,
> protoze jeho telo snad neni zadnej child proces. Vyresil jsem to tak,
> ze misto nastaveni promenne jeji hodnotu poslu na stdout, celej cyklus
> uzavru do backticku (`...`) a vysledek teprv pak do promenne odchytim
>
> PROM=`... | while read var; do
> ... echo $var ...
> done`
>
> Vycucal jsem to z prstu, funguje to, ale prijde mi to krkolomny a nejde
> tak asi nastavit vic ruznejch promennejch. Radu bych vazne privital.
Vice nez pred rokem se zde resil podobny problem. Preposilam odpoved
pana Trcky:
> Date: Fri, 5 Apr 2002 19:18:38 +0200 (CEST)
> From: David Trcka <trcka na poda.cz>
> Subject: Re: Problem se skriptem
> Message-ID: <Pine.LNX.4.44.0204051915140.6204-100000 na ns1.poda.cz>
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Fri, 5 Apr 2002, Jiri Caha wrote:
>
> > cat soubor | read LINE; echo $LINE
> >
> > jaky je v tom rozdil???
> >
> Nekdo by rekl, ze to je trest za nadbytecny cat ;)
>
> read LINE <soubor; echo $LINE
>
> Duvod je zrejme ten, ze shell pri pouziti roury (to je ta svisla cara)
> spusti subshell, takze promenne v nem nastavene se po navratu z nej
> ztrati.
>
> ---
> David Trcka, network administrator
> PODA s.r.o., Internet Service Provider
> Ostrava, 28. rijna 150, The Czech Republic
> Voice/Fax: +420 69 6612600
> PGP KeyID: 6D1BF0FE
> "If everything is under control, you are moving too slow."
> -- Mario Andretti
>
V teto odpovedi ukazana i cesta k reseni: misto roury pouzit presmerovani
vstupu. Napriklad,
# Hledame nick v databazi
NUM=''
while read nick cislo; do
if [ -n "$nick" -a "${nick:0:1}" != "#" -a "$nick" = "$1" ]; then
NICK="$nick"
NUM="$cislo"
break
fi
done < "$RC"
# Nemame zaznam v databazi
[ -z "$NUM" ] && NUM="$1"
# Rozdelujeme NUM na predcisli a samotne cislo
PRE="${NUM:0:3}"
NUM="${NUM:3}"
>
> Zdravim a diky,
> Dave
Diky vam za vyborny skript,
Alexej Sveshnikov
Další informace o konferenci Linux