Kam se ztraci promenna?

Vaclav Ovsik Vaclav.Ovsik na i.cz
Úterý Červenec 10 18:14:56 CEST 2001


On Tue, Jul 10, 2001 at 03:34:27PM +0200, Martin Spirk wrote:
> On Tue 10. July 2001 15:13, you wrote:
> >
> > > cat $soubor | while read a
> >
> > novy proces kopiruje stare prostredi (tedy i drive nastavene promenne)
> 
> Ktery proces? Pousti se novy shell? (zkousel jsem si vypisovat $$ a bylo 
> stejne uvnitr cyklu i venku)
No kdyz je tam to pipe '|' tak by se pustit mel.
Pravda s tim vypisem jsem ted sam zmaten, to nejak nedovedu objasnit.
Co vlastne presne znamena $$? V bash(1) o tom toho moc neni.

zito na bobek zito $ { eval 'echo $$ 1>&2'; sleep 100; } | { eval 'echo $$ 1>&2'; sleep 120; }
16633
16633

 
zito na bobek zito $ ps axf
...
16632 ?        S      0:01 grxvt -ls
16633 pts/4    S      0:01  \_ -bash
16804 pts/4    S      0:00      \_ -bash
16806 pts/4    S      0:00      |   \_ sleep 100
16805 pts/4    S      0:00      \_ -bash
16807 pts/4    S      0:00          \_ sleep 120
...

> 
> > >   echo konto=$KONTO
> > > done
> >
> > proces se ukonci a promenne v nem nastavene jsou fuc ...
> >
> 
> No budiz, ale jak to elegantne vyresit? 
> zkousel jsem vysledek cyklu predat pres ``, ale to mi neslo protoze zpetne 
> apostrofy uz v tom cyklu jsou a zrejme to nejde vnorit.

A co to napsat bez cat.

soubor=$1

while read a
do
  JMENO=`echo $a|cut -f1 -d=`
  HODNOTA=`echo $a|cut -f2 -d=`
  if [ $JMENO = "account" ]
  then
    KONTO=$HODNOTA
  fi
  echo konto=$KONTO
done <$soubor

echo konto=$KONTO


-- 
	Vaclav Ovsik		email: Vaclav.Ovsik na i.cz
	ICZ a.s.		phone: +420 19 7488511
				fax:   +420 19 7488506



Další informace o konferenci Linux