簡體   English   中英

如何使帶有大量引號的命令遠程運行?

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

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