Quotes within quotes within quotes in bash. :)

Kimball Larsen kimball at kimballlarsen.com
Fri Jun 23 15:42:47 MDT 2006

So, I'm writing a fairly nasy java app that needs to do some dumping  
of mysql data from many remote sources.

I know I could do this internally with the mysql drivers for java,  
but I feel it is faster, easier, and more reliable if I just drop out  
to a shell and run mysqldump directly.

Now, the only tricky bit is that some of these dump files will be >  
100 MB, so I need to perform the dump directly on the remote servers  
so I don't lock up the database forever while the dump is transferred.

So, basic idea is to dump on remote servers, compress dump files,  
slurp over to local machine, do stuff with the dumps.

As part of this, I want to use a where clause in my mysqldump.   
According to the manpages for mysqldump, you have to include quotes  
around your where clause.  If you in turn want to use a string w/in  
your where clause, you now have quotes within quotes.  So far, n/p.   
The tricky bit comes when you want to pass this whole thing to a  
shell to fire via ssh.  Then you get quotes within quotes within  
quotes - which bash disallows.


I have come up with a solution, but wanted to see if there was  
something more elegant:

ssh -l username some_host_IP '/usr/bin/mysqldump -C -umysqlusername - 
pmysqlpassword DBName TableName  -w"SomeColumn like `echo -e "\047"`% 
015`echo -e "\047"`" >> /tmp/dumpFromRemote1.sql'

ie, I use `echo -e "\047"` to get me a single quote where it needs to  
be to satisfy mysql.

Is there something cleaner?

-- Kimball 

More information about the PLUG mailing list