如何在带有双引号的ssh命令中处理单引号

时间:2020-06-19 18:26:16

标签: linux bash shell unix ksh

我有一个要求,我需要在当前和远程服务器中使用带有单引号的参数,如下所示:

var1=$2
var2=`echo $var1|sed -r "s/'/\\\\\'/g"`
echo "echo \\\"$var2\\\" && ssh id@server \\\" echo \\\"$var2\\\" \\\" " > sql1.txt
xargs --arg-file=sql1.txt --max-procs=$1 --replace --verbose /bin/sh -c "{}"

转义引号后,该参数在当前服务器中填充完美,但在远程服务器上未显示单引号。

ksh script.ksh 2 "tablename where last_load_dt = '2020-06-19'"

输出

/bin/sh -c echo "tablename where last_load_dt = '2020-06-19'" && ssh id@server "echo "tablename where last_load_dt = '2020-06-19'" "
tablename where last_load_dt = '2020-06-19'
---ssh to remote server---
tablename where last_load_dt = 2020-06-19 

如何在远程服务器中正确填充单引号?

1 个答案:

答案 0 :(得分:1)

如果可以使用bash(您已放置为标签),则这是一种解决方案:

printf "%s\0" "echo \"$2\" && ssh id@server echo \"${2@Q}\"" > sql1.txt
xargs -0 --arg-file=sql1.txt --max-procs=$1 --replace --verbose /bin/sh -c "{}"

$ {2 @ Q}用于正确地转义单引号。

xargs -0防止双引号被删除。

调用方法:

bash script.bash 2 "tablename where last_load_dt = '2020-06-19'"
相关问题