[英]How to have a command with lots of quotes running remotely?
我試圖遠程運行包含一些單引號,雙引號的命令行。
1)這是我想讓它在遠程主機上運行的命令。
echo '{"id":12345,"name":"activate_cluster"}'
格式應完全相同。 沒有任何缺少的字符。
2)這是我用來從本地主機觸發此命令的完整命令:
expect bashscript $hostname $user $pwd 'echo \'\{\"id\":12345\,\"name\":\"activate_cluster\"\}\'
3)但是,當它到達遠程主機時,該命令變為:
echo {"id":12345,"name":"activate_cluster"}
雙引號不見了! 有辦法解決這個問題嗎?
您不能在bash中的單引號中嵌入單引號: https : //www.gnu.org/software/bash/manual/bashref.html#Single-Quotes
您將必須執行以下操作:
expect bashscript $hostname $user $pwd 'echo '\''{"id":12345,"name":"activate_cluster"}'\'
# ...........................................^^^^......................................^^^
'\\''
-第一個引號以'echo
開頭的引號結束,轉義的引號后面附加一個文字引號,第三個引號打開一個新的引號字符串。 用單引號括起來,您無需大意使用反斜杠,因為它們全都是文字字符。
另一種方法是將命令存儲在單獨的變量中:
cmd=$(cat <<'END'
echo '{"id":12345,"name":"activate_cluster"}'
END
)
expect bashscript $hostname $user $pwd "$cmd"
有點呆板但比較整潔,不是嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.