[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: bash question



On Sat, Oct 10, 2009 at 07:45:14AM -0400, Antonio Perez wrote:
> Alex Samad wrote:
> 
> > Hi, i have this:
> 
> > RDSCHM="--remote-schema 'ssh -i /root/.ssh/id_backup -C  %s rdiff-backup --server'"
> 
> > and trying this
> > 
> > rdiff-backup \
> > $RDSCHM \
> > $RDRM \
> > "$DEST/"
> 
> > with sh -x i get this
>  
> > + rdiff-backup --remote-schema ''\''ssh' -i /root/.ssh/id_backup -C %s rdiff-backup '--server'\''' --remove-older-than '"10B"' --force max::/backups/test/system/
> 
> I am pretty sure you are using bash as the sh link, do 'ls -la /bin/sh' to get: /bin/sh --> /bin/bash
> If it were dash the responses would be different.

true - I could have sworn I had installed the latest dash package which
moves sh to dash
> 
> Testing: set up a "test" file with:
>         #!/bin/sh
>         RDSCHM="--remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'"
>         echo $RDSCHM
>         echo "$RDSCHM"
> with: bash -x test, I get:
>         + RDSCHM='--remote-schema '\''ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'\'''
>         + echo --remote-schema ''\''ssh' -i /root/.ssh/id_backup $'-C\302\240%s' 'rdiff-backup --server'\'''
>         --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
>         + echo '--remote-schema '\''ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'\'''
>         --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
> 
> with: dash -x test, I get:
>         + RDSCHM=--remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
>         + echo --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
>         --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
>         + echo --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
>         --remote-schema 'ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'
> 
> with dash there is no «  ''\''ssh'  »
> 
> Also, did you notice the difference between a command on an unquoted variable and a quoted one?
>         + echo --remote-schema ''\''ssh' -i /root/.ssh/id_backup $'-C\302\240%s' 'rdiff-backup --server'\'''
>         + echo '--remote-schema '\''ssh -i /root/.ssh/id_backup -C %s rdiff-backup --server'\'''
> 
> Conclusion: Quoting the variable will solve your problem, as this:
>         rdiff-backup \
>           "$RDSCHM" \
>           "$RDRM" \
>           "$DEST/"

I tried this but then rdiff-backup tried to execute the whole variable
as 1 command and not such command ssh\ -i\ /roo.....

> 
> 
> > the ''\''ssh' is the confusing bit it is seperate out the ssh and the -i.
> 
> Yes, on a bash shell, but only while quoting with -x, the actual command does the right thing.
> 
> > what can I do to prevent this.
> 
> Just put « $RDSCHM »  inside quotes as this: « "$RDSCHM" »
> 
> > My reading has lead me to IFS variable
> > but I don't want to start playing with this yet ! I think I am just
> > missing something. Hopefully the ml eyes will be able to see what i
> > can't
> 
> No need to....
> 
> > oh and its using dash well sh
> 
> It does not really matter which shell it is, when the issue is about correct quoting of variables.

Thanks I will investigate more

> 

Attachment: signature.asc
Description: Digital signature


Reply to: