我正在尝试远程运行包含一些单引号的命令行。
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"}
这对单引号消失了!有没有办法解决这个问题?
答案 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"
有点啰嗦,但更整洁,没有?