转义的bash-c字符串中的mysql查询。如何引用?

转义的bash-c字符串中的mysql查询。如何引用?,mysql,bash,ubuntu,quotes,gnu-parallel,Mysql,Bash,Ubuntu,Quotes,Gnu Parallel,您好,我在bash脚本中遇到了一个非常特殊的行。 代码如下: ssh $SOURCEIP "/usr/bin/time -f \"%e\" bash -c \"seq $ITER | parallel -n0 \"mysql --silent -h $TARGET -uroot -ppass -e 'SELECT * FROM dbname.tablename WHERE size = $SIZE;' >> out.txt\"" 问题是我的报价用完了。“mysql”开头的双引号和

您好,我在bash脚本中遇到了一个非常特殊的行。 代码如下:

ssh $SOURCEIP  "/usr/bin/time -f \"%e\" bash -c \"seq $ITER | parallel -n0 \"mysql --silent -h $TARGET -uroot -ppass -e 'SELECT * FROM dbname.tablename WHERE size = $SIZE;' >> out.txt\""
问题是我的报价用完了。“mysql”开头的双引号和转义双引号将“bash-c”中的双引号关闭。我必须将mysql语句放在双引号中,将查询放在单引号中,否则会出现错误,我无法确定如何继续。我知道我不应该像那样传递密码,它将在以后更改,每次我测试它时都会收到此警告“$ITER”-次,因为
--silent
不会抑制此操作。 有问题的代码是一个小型shell脚本的一部分,该脚本应该只执行此数据传输。 由于与其他脚本的一致性,我希望首先使用ssh而不是通过并行方式切换到另一台机器

因此,基本上我需要在bash-c命令周围加上双引号,以使整个并行操作正常工作,因为打开ssh双引号,已经对其进行了转义,而且我还需要将mysql命令放在引号内,但它们以某种方式相互关闭

任何帮助都将不胜感激。 提前谢谢。 拉吉奥

编辑:(解决方案) 根据@ole tange的建议,以下命令对我有效

parallel --shellquote | parallel --shellquote
在shell中调用后,我将有问题的字符串粘贴到提示符中,并取回被屏蔽的字符串。我仍然很难弄清楚到底要粘贴什么,但最终这是合乎逻辑的。 我贴在报价单上的内容是:

sql mysql://root:pass@$TARGET/ 'SELECT data FROM db_name.tablename WHERE size = ${SIZE};' >> out.txt
但我的查询中的变量仍然存在一些问题。这里的问题是,在所有内容都被并行引用器屏蔽之后,我不得不去屏蔽2个变量$TARGET和$SIZE的屏蔽。也许我的思维方式太费劲了,但我无法用另一种方式来实现它。还要注意的是,我并没有像我以前的计划那样在整个sql语句中加引号,因为现在引用者对此进行了补偿。出于一致性原因,我粘贴了我最后使用的最后一个字符串(之后进行了更改):


GNU Parallel有一个引号:

$ parallel --shellquote
"*\`$
[CTRL-D]
\"\*\\\`\$
你可以做两次:

$ parallel --shellquote | parallel --shellquote
"*\`$
[CTRL-D]
\\\"\\\*\\\\\\\`\\\$
因此,只需粘贴要引用的字符串

但您可能需要考虑使用函数并使用<代码> Envia Simule复制函数:

myfunc() {
  size=$1
  target=$2

  sql mysql://root:pass@$target/ "SELECT data FROM db_name.tablename WHERE size = $size;" >>  out.txt
}
env_parallel --env myfunc -S $SOURCEIP --nonall myfunc $SIZE $TARGET
另外:不要使用
mysql
try
sqlmysql://root:pass@/'从dbname.tablename中选择*,其中size=$size;'

myfunc() {
  size=$1
  target=$2

  sql mysql://root:pass@$target/ "SELECT data FROM db_name.tablename WHERE size = $size;" >>  out.txt
}
env_parallel --env myfunc -S $SOURCEIP --nonall myfunc $SIZE $TARGET