【发布时间】:2020-10-10 01:43:26
【问题描述】:
我有一个要求,我需要在当前和远程服务器中使用具有单引号的参数,如下所示
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
如何在远程服务器中正确填充单引号?
【问题讨论】:
-
@thatotherguy 写给
sql1.txt。 -
暂时忽略如何,你想做什么?多层引用和转义通常意味着您以错误的方式处理此问题。
-
SSH 需要额外的转义层。这是一个更简单的复制:
echo "'hi'"; ssh localhost echo "'hi'"; ssh localhost "echo \"'hi'\""。不过,您绝对应该退后一步重新考虑这种方法,因为这种方法既麻烦又容易出错。如果要并行运行命令,可以使用带有sem和printf "%q"的简单循环来转义