如果我运行此命令
/bin/bash -c 'while true;do /usr/bin/etcdctl set my-container "{\"host\": \"1\", \"port\": $(/usr/bin/docker port my-container 5000 | cut -d":" -f2)}" --ttl 60;sleep 45;done'
我从etcd返回了预期的结果{“主机”:“ 1”,“端口”:49155}
但是如果我把它放在一个systemd文件中
ExecStart=/bin/bash -c 'while true;do /usr/bin/etcdctl set my-container "{\"host\": \"1\", \"port\": $(/usr/bin/docker port my-container 5000 | cut -d":" -f2)}" --ttl 60;sleep 45;done'
我回来了{host:1,port:49155}
为什么文件中的转义符会有所不同?我该如何解决?谢谢!!
systemd-escape '\"a fun thing"\'
输出: \x5c\x22a\x20fun\x20thing\x22\x5c
[Service] ExecStart=/bin/sh -c 'echo "\x5c\x22a\x20fun\x20thing\x22\x5c"'
将打印 a fun thing
Systemd所做的不像您现在所知道的bash那样,因此存在转义问题。实际上,systemd在解析单引号和双引号后会删除它们。这个事实在文档中是正确的(我也是这样做的,然后阅读:D)。
该解决方案将调用一个脚本,该脚本将在您的目的允许的情况下回显您需要的信息(带有转义的引号)。