← Back to team overview

sslug-teknik team mailing list archive

Re: Scripting problem

 

On Thu, 06 Aug 2009 09:52:52 +0200
Kim Jensen <kimj@xxxxxxx> wrote:

> 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//\/?*}'             





-- 
Donald Axel <donax@xxxxxx>


Follow ups

References