【问题标题】:Escape cURL command in Yaml which contains quotes and apostrophesYaml 中包含引号和撇号的转义 cURL 命令
【发布时间】:2017-08-30 15:26:07
【问题描述】:

我有这个 cURL 命令:

curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX

我需要在支持 Yaml 的 GitLab CI 文件中使用它。 Yaml 解析器不接受它。通常我会用引号括起来,但我已经在命令中同时使用了引号和撇号。

这就是命令现在的样子。

如何正确转义序列?

deploy:
  stage: deploy
  script:
    - "curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"

【问题讨论】:

    标签: curl escaping yaml gitlab-ci


    【解决方案1】:

    最简单的方法是使用块标量:

    deploy:
      stage: deploy
      script: |-
        curl -X POST --data-urlencode 'payload={"text": "A new version has been deployed to production."}' https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
    

    | 开始一个文字块标量,- 告诉 YAML 丢弃尾随换行符(否则它将成为标量的一部分)。为了可读性,您可以使用折叠块标量代替(换行符将转换为空格):

    deploy:
      stage: deploy
      script: >-
        curl -X POST --data-urlencode 'payload={"text":
        "A new version has been deployed to production."}'
        https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX
    

    最后,也可以使用双引号,只要将标量内的双引号转义即可(换行符也折叠成空格):

    deploy:
      stage: deploy
      script: 
        "curl -X POST --data-urlencode 'payload={\"text\":
         \"A new version has been deployed to production.\"}' 
         https://hooks.slack.com/services/XXXXXXX/XXXXXXXXX/XXXXXXXXXXXXX"
    

    【讨论】:

    • @Astronaut The docs 说你应该为此使用一个列表。您可以为列表中的每个项目使用所有这些标量样式(例如,- >- 启动一个包含折叠块标量的列表项)。
    • 嗯,我确实试过了,但 CI lint 让我抱怨
    • 我遇到的问题是,使用双引号的变量没有被解析......因为它是一个字符串,呵呵......有点痛苦
    猜你喜欢
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2013-07-13
    相关资源
    最近更新 更多