← Back to team overview

sslug-teknik team mailing list archive

Re: Scripting problem

 

Donald J Axel wrote:
---{sakset}---
root="/home/kim/projects/"
cmdPerl="perl -pi -e 's/${root//\//\/}\///g'"

${cmdPerl} "rapport xxx.html"
---{sakset}---

Når jeg prøver at debugge, så får jeg den rigtige kommando

echo "${cmdPerl} \"rapport xxx.html\""
perl -pi -e 's/\/home\/kim\/projects\/\///g' "rapport
xxx.html"

Ved at erstatte "echo" med "eval", så virker det :-)
Skyldes det mon ikke at "eval" fjerner de mange quotes omkring
"rapport x.html" som du af en eller anden (ikke udledbar) grund har sat?
Som det fremgår af eksemplet, indeholder filnavnene mellemrum,
dette er min (udledbare) grund til at anvende quotes. Problemet
er at der i regex'en indgik en Bash variabel med en "præ-regex",
som åbenbart gav nogle problemer i scriptet. Ved at tilføje et
eval før, så hjalp det. Eval'en krævede dog at hele linien kunne
evalueres og udføres, derfor var de ekstra escapede quotes (som
er vist i "echo" linien) nødvendige.

"Præ-regex" fungerer også uden eval:


saturn:/ #MYCOMMAND='ls/fjern/mig -d e*'
saturn:/ #bash -c 'eval ${MYCOMMAND}' bash: ls/fjern/mig: No such file or directory saturn:/ #bash -c 'eval ${MYCOMMAND//\/fjern\/mig}' etc exp saturn:/ #bash -c '${MYCOMMAND//\/fjern\/mig}' etc exp saturn:/ #bash -c 'eval ${MYCOMMAND//\/?*}'
Havde du prøvet at læse hvad jeg skrev - så ville du se at min bash
regex der indgik i perl linien faktisk virkede som den skulle. Perl
linien virkede også direkte udførsel. Det der ikke virkede var linien i
scriptet - hvilket eval ændrede.

/Kim

--
"Good judgment comes from experience; experience comes from bad judgment."


References