远程ssh执行:双引号内的单引号

时间:2017-09-15 11:01:57

标签: ssh

全部, 在将文件写入远程节点时,我无法转义单引号。

    ssh -i demo.pem -t ec2-user@10.10.10.10 'echo '\''{"watches": [{"type": "key","key": "test","handler": "neon -e 'sudo /opt/watch_handler.sh'"}]}'\''| sudo tee /etc/key.json'

我得到的输出如下。

    {"watches": [{"type": "key","key": "test","handler": "neon -e sudo /opt/watch_handler.sh"}]}

我希望输出在'sudo /opt/watch_handler.sh'周围有单引号

    {"watches": [{"type": "key","key": "test","handler": "neon -e 'sudo /opt/watch_handler.sh'"}]}

'\'无效。

你能帮忙吗?

谢谢,

1 个答案:

答案 0 :(得分:0)

使多个引用级别正确是麻烦且容易出错的。考虑替代解决方案,例如:

cat <<EOF | ssh -i demo.pem -t ec2-user@10.10.10.10 sudo tee /etc/key.json
{"watches": [{"type": "key","key": "test","handler": "neon -e 'sudo /opt/watch_handler.sh'"}]}
EOF

我喜欢使用cat因为它不需要任何转义才能工作。但是,只要您在JSON表达式中转义双引号,您也可以使用echo而不是cat在本地生成字符串:

echo "{\"watches\": [{\"type\": \"key\",\"key\": \"test\",\"handler\": \"neon -e 'sudo /opt/watch_handler.sh'\"}]}" | sudo tee /etc/key.json