簡體   English   中英

如何使用雙引號處理 ssh 命令中的單引號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM