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