/ 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
Shell script problem
Fra : Jan Birk


Dato : 19-11-05 16:26

Efterfølgende script fungerer fint når det køres i hånden, men ikke når
det afvikles fra crontab. Det kommer aldrig i den inderste løkke selvom
'for' lykken er sand (der eksisterer en eller flere filer).

Nogle ide'er (jeg har stirret mig blind

Der ligger en fil i KS_HOME og output crontab returnerer $fil korrekt,
men går alligevel ikke ind i while løkken....

Det afvikles som root.

(<-- er mine kommentarer)
---------- script -------------------
#!/bin/bash
KS_HOME=/home/ks ; export KS_HOME

for fil in `ls $KS_HOME` ; do
echo "Opretter: $fil" <-- Bliver returneret af cron!
cat $KS_HOME/$fil | while read line ; do
echo $line >> /tmp/test.$$ <-- kommer aldrig herind???????
done
done
------------------------------------------

Pft

/Jan

 
 
Jan Birk (19-11-2005)
Kommentar
Fra : Jan Birk


Dato : 19-11-05 16:41

Tjaa

> #!/bin/bash
> KS_HOME=/home/ks ; export KS_HOME
>
> for fil in `ls $KS_HOME` ; do
> echo "Opretter: $fil" <-- Bliver returneret af cron!
> cat $KS_HOME/$fil | while read line ; do
> echo $line >> /tmp/test.$$ <-- kommer aldrig herind???????
> done
> done

Det viste sig at $fil ikke indeholder en CR, hvorfor 'while read line'
løkken ikke eksekveres.....

En CR i enden på filerne, og det funger fint.

/Jan

Thorbjoern Ravn Ande~ (20-11-2005)
Kommentar
Fra : Thorbjoern Ravn Ande~


Dato : 20-11-05 00:59

Jan Birk <jan.birk@invalid.domain.null> writes:

> løkken ikke eksekveres.....
>
> En CR i enden på filerne, og det funger fint.

(cat ... | echo "") | while read ...

?
--
Thorbjørn Ravn Andersen
http://unixsnedkeren.dk - Unix, Java, Web, Netværk, Århus

Kasper Dupont (21-11-2005)
Kommentar
Fra : Kasper Dupont


Dato : 21-11-05 09:13

Jan Birk wrote:
>
> Der ligger en fil i KS_HOME og output crontab returnerer $fil korrekt,
> men går alligevel ikke ind i while løkken....
>
> Det afvikles som root.

Det betyder så at brugeren ks forholdsvist nemt kan overtage
kontrollen med systemet. Man kan f.eks. oprette en stribe
symlinks med /tmp/test.* navne så root overskriver en udvalgt
fil.

>
> (<-- er mine kommentarer)
> ---------- script -------------------
> #!/bin/bash
> KS_HOME=/home/ks ; export KS_HOME
>
> for fil in `ls $KS_HOME` ; do

Denne brug af ls er ikke helt hensigtsmæssig. Hvad nu hvis
der er whitespace i nogle af navnene? Og hvad nu hvis det
ikke er regulære filer men directories, pipes og symlinks?

> echo "Opretter: $fil" <-- Bliver returneret af cron!
> cat $KS_HOME/$fil | while read line ; do

Der burde quotes omkring navnet.

> echo $line >> /tmp/test.$$ <-- kommer aldrig herind???????

Her er den største trussel. En vilkårlig bruger kan på
forhånd have oprettet et symlink med navnet /tmp/test.$$

--
Kasper Dupont
Note to self: Don't try to allocate
256000 pages with GFP_KERNEL on x86.

Jan Birk (21-11-2005)
Kommentar
Fra : Jan Birk


Dato : 21-11-05 14:30

Hej Kasper,

Tak for dine hint. Dog var det en eksempel kode...

>> echo $line >> /tmp/test.$$ <-- kommer aldrig herind???????

Det var kun for illustrere ovenstående.

Ellers tak

/Jan

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

Månedens bedste
Årets bedste
Sidste års bedste