Klaus Alexander Seistrup <spam@magnetic-ink.dk> writes:
> Jeg skrev:
>
> >> #!/usr/bin/sh -x
> >> IFS="
> >> "
> >> echo -n "$@ "
> >> fn=`echo $@ |awk '{gsub(" ","\\\\ ");print;}'`
> >> grep -v \$Name: "$fn" |md5sum
> >> --------------
> >>
> >> Scriptet er lavet til at kalde fra find.
> >
> > Hjælper det heller ikke noget at bruge en kombination af find
> > og xargs, begge med "-0"? Fx
> >
> > find . blah-blah -print0 | xargs -r0 script-der-driller
>
Det er ikke find-niveauet der fejler. Filnavnet kommer korrekt ind i
dette script, men grep forstår det ikke!
> Nå ja, og så ville jeg nok droppe det med "$@" og bruge "$1" i
> stedet:
Så arbejder grep kun på første ord i navnet.
IFS="
"
er nok overflødig, men var et af de tricks Google kom op med.
>
> #!/usr/bin/sh -x
> # Bor den shell virkelig i /usr/bin?
Hmm, på cygwin gør den!
> echo -n "$1 "
> grep -v '$Name' "$1" | md5sum
> #
>
Så er vi tilbage ved min version 0.0, som heller ikke virker.
> og s? kalde det fra xargs med
>
> ??? | xargs -r0 -n1 script-der-forh?bentlig-ikke-driller
>
>
Her er hvad jeg får ud af at køre scriptet på min woody:
$ find et\ eller\ andet/ -type f |xargs -r0 my_md5.sh
+ IFS=
+ echo -n 'et eller andet/t.t
'
et eller andet/t.t
++ echo 'et eller andet/t.t'
++ awk '{gsub(" ","\\ ");print;}'
+ fn=et\ eller\ andet/t.t
+ grep -v '$Name:' 'et\ eller\ andet/t.t'
grep: et\ eller\ andet/t.t: No such file or directory
+ md5sum
d41d8cd98f00b204e9800998ecf8427e
$ cd et\ eller\ andet/
$ md5sum t.t
2722022950aad7dcc304bf0facb4598e t.t
$
Som du kan se:
- Hele filnavnet kommer over i scriptet my_md5.sh
- Der indsættes '\' foran ' ' i navnet
- grep får det modificerede navn som argument, men fejler
Kopierer man linien "grep -v '$Name:' 'et\ eller\ andet/t.t'"
og udfører den direkte, virker det!
$ grep -v '$Name:' et\ eller\ andet/t.t |md5sum
2722022950aad7dcc304bf0facb4598e
Hvad er galt? Hvorfor parses det ikke ens i de 2 tilfælde?
--
Mogens Dybæk Christensen
e-mail mdc at mail dot tele dot dk