Quotes within quotes within quotes in bash. :)
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?
More information about the PLUG