[英]How to handle single quotes inside an ssh command with double quotes
我有一個要求,我需要在當前和遠程服務器中使用帶有單引號的參數,如下所示
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 "{}"
在 escaping 引用之后,參數在當前服務器中完美填充,但在遠程服務器上沒有顯示單引號。
ksh script.ksh 2 "tablename where last_load_dt = '2020-06-19'"
output
/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'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.