Tema: Re: ksh, wtf?
Autorius: Fla
Data: 2008-08-14 15:05:26
Na esme tame, kad man reikia pasiimti skirtingose scripto vietoje vykdomos "ps -e ...." komandos rezultata..
Ir todel noretusi visa ta "ps -e ..." skripte tureti uzrasyta tik 1 karta, o ne 10 vienodu eiluciu:

PID=`ps -e ....` cia (vietoj .... dar kokia 100 simboliu :)

Pirma mintis savaime aisku buvo visa "ps -e ..." sudeti i kintamaji, ir naudot PID=`$VAR`, bet panasu
kad teks ieskoti kitu sprendimu.. o 'eval' rezultato i kintamaji kaip suprantu negrazins :(

O sitas scriptukas buvo tik kaip iliustracija kas neveikia - "command substitution", kai komanda paduodama
kaip kintamasis, ir jame yra "|" (nes nenaudojant kintamojo, arba nenaudojant "|", viskas veikia)

Laimis wrote:
> Fla rašė:
>> Kodel neveikia #2 ir #3, nors output ish #1 neiskraipytas (1:1)?
>>
>> ---------------------------------------(begin: z)
>> #!/bin/ksh
>>
>> Z='ps -e | grep aa'
>>
>> clear
>> echo '---------------'
>> echo 'test #1:' `echo $Z`
>> echo '---------------'
>> echo 'test #2:' `$Z`
>> echo '---------------'
>> echo 'test #3:' $($Z)
>> echo '---------------'
> 
> Tai #1 atveju:
> `echo $Z` -- išvedamas (echo) $Z kintamasis ir visa tai įvykdoma kaip 
> komanda (``), o toliau jau šios komandos rezultatas sujungiamas su 
> pirmuoju echo.
> 
> #2 ir #3 atvejais (o ir apskritai) $Z kintamąjį reikėtų tiesmukiškai 
> įvykdyti (eval); šiais atvejais veikia kintamojo reikšmės pakeitimas 
> (substitution), tad '|' ir, turbūt, kt. (operatoriai) neapdorojami pačio 
> shell'o, nes jie nėra (na, neskaitomi esantys) komandinėje eilutėje):
> 
> eval $Z
> 
>