我有一个需要在当前和远程服务器中使用单引号的参数的要求,如下所示
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
如何在远程服务器中正确填充单引号?
最佳答案
如果可以使用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'"
关于linux - 如何在带双引号的ssh命令中处理单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62476431/