2017-04-05 142 views
1

我有了這個cURL命令:逃避YAML 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" 

回答

3

最簡單的方法是使用一個塊標量:

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"