/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
usikkert cgi-program?
Fra : Ole Michaelsen


Dato : 18-05-01 11:26

Hej gruppe.

Jeg sidder og kigger på et cgi-script, der gør følgende (i ksh):

splitArgs()
{
for item in `echo $QUERY_STRING | tr "&" " "`;do
export `echo $item`
done
}

QUERY_STRING er det der kommer efter '.../cgi-bin/program.cgi?' (uden
''). Hvis jeg sætter QUERY_STRING til fx '"touch hej"' (uden ''), og
kører '`echo $QUERY_STRING`' (uden ''), laver den fint nok filen 'hej'
(uden ''). Men hvis jeg har det i løkken gør den det ikke:

for item in (og her burde den så lave filen); do
export `echo $item` <--- men item er ... øh, ingenting. Der kom
intet ud af echo $QUERY_STRING, andet end en fil, intet på stdout
done

Nogen der kan hjælpe med at vise at det kan lade sig gøre at få den til
at udføre kommandoen? Det ser _ud_ som om man, kan, men jeg kan
ikke...

Anyone?

P.f.t,

Ole Michaelsen.

 
 
Peter Dalgaard BSA (18-05-2001)
Kommentar
Fra : Peter Dalgaard BSA


Dato : 18-05-01 12:01

Ole Michaelsen <omic+usenet1@fys.ku.dk> writes:

> Hej gruppe.
>
> Jeg sidder og kigger på et cgi-script, der gør følgende (i ksh):
>
> splitArgs()
> {
> for item in `echo $QUERY_STRING | tr "&" " "`;do
> export `echo $item`
> done
> }
>
> QUERY_STRING er det der kommer efter '.../cgi-bin/program.cgi?' (uden
> ''). Hvis jeg sætter QUERY_STRING til fx '"touch hej"' (uden ''), og
> kører '`echo $QUERY_STRING`' (uden ''), laver den fint nok filen 'hej'
> (uden ''). Men hvis jeg har det i løkken gør den det ikke:
>
> for item in (og her burde den så lave filen); do
> export `echo $item` <--- men item er ... øh, ingenting. Der kom
> intet ud af echo $QUERY_STRING, andet end en fil, intet på stdout
> done
>
> Nogen der kan hjælpe med at vise at det kan lade sig gøre at få den til
> at udføre kommandoen? Det ser _ud_ som om man, kan, men jeg kan
> ikke...

Øeh, det står mig ikke helt klart om dit problem er om du får lavet
hej eller ej, men

$ Q="touch hej"
$ echo `echo $Q`
touch hej
$ for item in `echo $Q` ; do echo $item ; done
touch
hej
$ for item in `\`echo $Q\`` ; do echo $item ; done
$ ls -l hej
-rw-r--r-- 1 pd users 0 May 18 13:03 hej

altså, hvis du vil have *udført* resultatet af en kommando så skal der
et sæt extra `` til, men touch skriver jo ingenting på stdout, så nu
gør løkken ingenting. Hvad var det egentlig du ville??

--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907

Ole Michaelsen (18-05-2001)
Kommentar
Fra : Ole Michaelsen


Dato : 18-05-01 13:08

Peter Dalgaard BSA <p.dalgaard@biostat.ku.dk> writes:
>
> Øeh, det står mig ikke helt klart om dit problem er om du får lavet
> hej eller ej, men
>
> $ Q="touch hej"
> $ echo `echo $Q`
> touch hej
> $ for item in `echo $Q` ; do echo $item ; done
> touch
> hej
> $ for item in `\`echo $Q\`` ; do echo $item ; done
> $ ls -l hej
> -rw-r--r-- 1 pd users 0 May 18 13:03 hej
>
> altså, hvis du vil have *udført* resultatet af en kommando så skal der
> et sæt extra `` til, men touch skriver jo ingenting på stdout, så nu
> gør løkken ingenting. Hvad var det egentlig du ville??

Jeg vil ha' et cgi-script, jeg (i teorien) ikke kan ændre i, til at
udføre en kommando, i stedet for blot at echo'e nogle variable. Jeg vil
ha' scriptet til at gøre dette ved at give det en URL det ikke fra
starten var designet til at modtage (det er derfor det er snyd bare at
ændre i scriptet).

Jeg kan altså ikke blot ændre linjen
> $ for item in `echo $Q` ; do echo $item ; done
til
> $ for item in `\`echo $Q\`` ; do echo $item ; done

Jeg er ligeglad med at løkken ikke gør noget.

Opgaven må gå ud på at `echo $Q` skal blive til `touch hej`, som så
bliver udført. Dvs at $Q="`touch hej`". I så fald burde echo $Q blive
til echo `touch hej` (hvilket virker), og `echo $Q` til `echo `touch
hej``, hvilket også virker. Det synes jeg bare ikke det gør i løkken


-- Ole

Peter Dalgaard BSA (19-05-2001)
Kommentar
Fra : Peter Dalgaard BSA


Dato : 19-05-01 12:13

Ole Michaelsen <omic+usenet1@fys.ku.dk> writes:


> > et sæt extra `` til, men touch skriver jo ingenting på stdout, så nu
> > gør løkken ingenting. Hvad var det egentlig du ville??
>
> Jeg vil ha' et cgi-script, jeg (i teorien) ikke kan ændre i, til at
> udføre en kommando, i stedet for blot at echo'e nogle variable. Jeg vil
> ha' scriptet til at gøre dette ved at give det en URL det ikke fra
> starten var designet til at modtage (det er derfor det er snyd bare at
> ændre i scriptet).
....
> Opgaven må gå ud på at `echo $Q` skal blive til `touch hej`, som så
> bliver udført. Dvs at $Q="`touch hej`". I så fald burde echo $Q blive
> til echo `touch hej` (hvilket virker), og `echo $Q` til `echo `touch
> hej``, hvilket også virker. Det synes jeg bare ikke det gør i løkken
>

Hmm. Jeg tror faktisk ikke at man kan. Du sku' i så fald have
backquotes'ne ind i $Q, men derfra tror jeg ikke de har nogen effect
uden at der er en "eval" et sted.

$ Q="\`echo hej\`"
$ echo $Q
`echo hej`
$ eval $Q
bash: hej: command not found
$ $Q
bash: `echo: command not found


--
O__ ---- Peter Dalgaard Blegdamsvej 3
c/ /'_ --- Dept. of Biostatistics 2200 Cph. N
(*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk) FAX: (+45) 35327907

Ole Michaelsen (20-05-2001)
Kommentar
Fra : Ole Michaelsen


Dato : 20-05-01 17:21

Peter Dalgaard BSA <p.dalgaard@biostat.ku.dk> writes:

> > Opgaven må gå ud på at `echo $Q` skal blive til `touch hej`, som så
> > bliver udført. Dvs at $Q="`touch hej`". I så fald burde echo $Q blive
> > til echo `touch hej` (hvilket virker), og `echo $Q` til `echo `touch
> > hej``, hvilket også virker. Det synes jeg bare ikke det gør i løkken
> >
>
> Hmm. Jeg tror faktisk ikke at man kan. Du sku' i så fald have
> backquotes'ne ind i $Q, men derfra tror jeg ikke de har nogen effect
> uden at der er en "eval" et sted.
>
> $ Q="\`echo hej\`"
> $ echo $Q
> `echo hej`


> $ eval $Q
> bash: hej: command not found
> $ $Q
> bash: `echo: command not found
>

Hum. Maaske har du ret. Tak fordi du gad "taenke med"

Om ikke andet vil jeg alligevel se at faa ksh-scriptet skiftet ud med
noget perl, som er lidt bedre til at sikre at input kun er i det
format, det er meningen det skal vaere.

Og saa skal firewa^H^H^H^H^H^Hfiltreret foran maskinen nok ogsaa tunes
lidt saa tcp-forbindelser ikke kan startes indefra... (uvag: unpxvat
rkcbfrq, xncvgry 8, onpx punaaryf) - men det er en anden historie.

Vh,

Ole

Søg
Reklame
Statistik
Spørgsmål : 177513
Tips : 31968
Nyheder : 719565
Indlæg : 6408605
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste