lifecycle:
preStop:
exec:
command: ["sh", "-c", "curl -v -X PUT -d '\"SHUTTING_DOWN\"' http://localhost:8080/v1/info/state"]我希望这会产生一个卷曲的url
curl -v -X PUT -d '"SHUTTING_DOWN"' http://localhost:8080/v1/info/state 我是如何得到额外的单引号包围‘“SHUTTING_DOWN”’
curl -v -X PUT -d ''"SHUTTING_DOWN"'' http://localhost:8080/v1/info/state 有什么建议吗,我哪里出错了?
发布于 2022-06-30 11:50:16
我建议尽可能多的删除引号。在最初的示例中,您有来自YAML的一层引号,以及来自sh -c包装器的一层引号。由于您需要HTTP本体本身具有单引号和双引号--您需要通过连线发送带有这两种引号的字符串'"SHUTTING_DOWN"' --尽可能多地删除引用是有帮助的。
在壳和YAML中,这两种引号的行为都不同。反斜杠转义只在双引用字符串中工作,所以在外层可能需要这样做;然后在双引号中需要单引号;然后需要反斜杠-转义双引号。
具体来说,在YAML中,字符串周围的引号通常是可选的,除非它们需要消除事物的歧义(强制'true'或'12345')为字符串。这样你就可以去掉一层引用了。如果您将YAML块样式与一行中的一个列表项一起使用,您也会发现这一点更加清晰。
command:
- /bin/sh
- -c
- curl -v -X PUT -d "'\"SHUTTING_DOWN\"'" http://localhost:8080/v1/info/state不过,我可能还能再往前走一步。您没有使用环境变量展开、多个命令或任何其他需要shell的操作。这意味着您不需要sh -c包装器。如果删除这一点,那么唯一需要引用的层是YAML引用;您不需要担心在YAML引用的字符串中嵌入shell转义字符串。
您确实需要确保正确处理引号。如果字符串以'或"开头,则YAML将将其解析为引号字符串,如果不是,则解析为没有引号的字符串中没有转义选项。。因此,您可能需要将整件事情放在一个双引号字符串中,并反斜杠-转义作为值一部分的双引号。
请记住,每个单词都需要进入一个单独的YAML列表项。curl和许多命令一样,可以将选项和参数组合在一起,这样就可以将-XPUT作为单个参数,也可以将-X和PUT作为两个单独的参数,但-X PUT作为单个单词将包含空间作为该单词的一部分,并将其混淆。
command:
- curl
- -v
- -X
- PUT
- -d
- "'\"SHUTTING_DOWN\"'"
- http://localhost:8080/v1/info/statehttps://stackoverflow.com/questions/72810814
复制相似问题