如何使用远程运行大量引号的命令?

时间:2016-02-02 00:07:50

标签: bash remote-access

我正在尝试远程运行包含一些单引号的命令行。

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"}

这对单引号消失了!有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

您无法在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"

有点啰嗦,但更整洁,没有?