/ 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
for ELEM in med mellemrum
Fra : Martin Hansen


Dato : 20-04-04 13:51

Hej alle

Jeg er ved at lave et script der skal gøre noget ved nogle filnavne,
men er stødt på et problem

For ELEM in "foo" "bar" "de lt"
do echo $ELEM
done
giver som ventet
foo
bar
de lt

ls -Q
giver som ventet
"foo"
"bar"
"de lt"

men
For ELEM in `ls -Q`
do echo $ELEM
done
giver
"foo"
"bar"
"de
lt"

Hvordan forklarer jeg bash at "de lt" er et element?

Jeg kører bash under cygwin

PFT

Martin Hansen


 
 
Peter Makholm (20-04-2004)
Kommentar
Fra : Peter Makholm


Dato : 20-04-04 13:56

Martin Hansen <mah_news@danfoss.com> writes:

> Jeg er ved at lave et script der skal gøre noget ved nogle filnavne,
> men er stødt på et problem

Jeg ville lave noget ala:

find -maxdepth 1 -print0 | xargs -0i echo {}

Det kræver dog nok at det du vil kan gøres i en enkelt kommando.

> Jeg kører bash under cygwin

Det er afprøvet under cygwin og ser ud til at virke.

--
Peter Makholm | What if:
peter@makholm.net | Tanenbaum had convinced Linus that his
http://hacking.dk | operating system really was obsolete

Peter Makholm (20-04-2004)
Kommentar
Fra : Peter Makholm


Dato : 20-04-04 14:01

Peter Makholm <peter@makholm.net> writes:

> find -maxdepth 1 -print0 | xargs -0i echo {}
>
> Det kræver dog nok at det du vil kan gøres i en enkelt kommando.

Følgende virker også og er nærmere hvad du selv prøver på:

ls | while read EVAL ; do
echo $EVAL
done

Så kan du lave flere komamndoer i løkken.

--
Peter Makholm | First you fall in love with Antarctica, and then it
peter@makholm.net | breaks your heart
http://hacking.dk | -- Antarctica

Martin Hansen (20-04-2004)
Kommentar
Fra : Martin Hansen


Dato : 20-04-04 14:48

On 20 Apr 2004 15:00:48 +0200, Peter Makholm <peter@makholm.net>
wrote:
>Følgende virker også og er nærmere hvad du selv prøver på:
>
>ls | while read EVAL ; do
> echo $EVAL
>done
>
>Så kan du lave flere komamndoer i løkken.
Det blev denne jeg brugte tak.

Jeg havde en version med ls|xargs men jeg ville undgå at den lavede en
fork for hver filnavn da det åbeenbart er langsomt under cygwin.

Scriptet er et recursivt script der parser en fil struktur.

Den forløbige version ser således ud:
if [[ -z $2 ]]; then
echo "<html>
   <head>
   </head>
   <body>
"
fi

if [[ -z $1 ]]; then
exit
fi

ls "$1"| while read ELEM_UQ
do
if [[ -f "${1}/${ELEM_UQ}" ]];then
   echo "<li><a href=\"$ELEM_UQ\" >$ELEM_UQ</a><br></li>"
else
   echo "<li>$ELEM_UQ</li>"
   echo "<ul>"
   bash ~/html_tree.sh "$1/${ELEM_UQ}" nest
   echo "</ul>"
fi
done
if [[ -z $2 ]]; then
echo "</body></html>"
fi

--

MVH

Martin hansen


Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste