我有一个要求,我需要在当前和远程服务器中使用带有单引号的参数,如下所示:
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
如何在远程服务器中正确填充单引号?
答案 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'"